同じことを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]