データの整列(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]