データの整列(Haskell版)
同じことをHaskellで。Ordクラスのインスタンスにしたら sortByDic はただの sort ですんだ。
import List
data Point = Pt Float Float deriving (Show, Eq, Ord)
distance :: Point -> Float
distance (Pt x y) = sqrt (x * x + y * y)
sortByDic :: [Point] -> [Point]
sortByDic = sort
sortByDis :: [Point] -> [Point]
sortByDis = List.sortBy (\p1 p2 -> compare (distance p1) (distance p2))
実行結果,辞書順:
*Main> sortByDic [Pt 3.2 1.9, Pt 3.2 0.3, Pt 1.2 3.5]
[Pt 1.2 3.5,Pt 3.2 0.3,Pt 3.2 1.9]
距離の昇順:
*Main> sortByDis [Pt 3.2 1.9, Pt 3.2 0.3, Pt 1.2 3.5]
[Pt 3.2 0.3,Pt 1.2 3.5,Pt 3.2 1.9]
