上のいくつかのソートをHaskellで書いてみた

超適当。

-- 挿入ソート
import Data.List
insSort = foldr insert []

-- 選択ソート
selSort [] = []
selSort xs = let min = minimum xs
             in [min] ++ selSort [x | x <- xs, x /= min]

-- バブルソート(偽)
bblSort [] = []
bblSort xs = let max = maximum xs
             in (bblSort [x | x <- xs, x /= max]) ++ [max]

target = [5, 2, 4, 6, 3, 1, 0]

main = do print $ insSort target
          print $ selSort target
          print $ bblSort target


バブルソートバブルソートになってないのは置いとくとして、ビンソートってどう書けばいいんだ。


これをJava版と比べると、

  • 短い
  • 0とか1とかのリテラルがアルゴリズム中に出てこない
  • コードがアルゴリズムを素直に表している*1

アルゴリズム中にリテラルが出てこないのは、コードがアルゴリズムを素直に表していることの結果なんだろうけど、それにしてもすごい。


あー、Haskellをもっとまともに使えるようになりたい。

*1:バブルソートは偽なので気にしないでください