クイックソートも 6 行で
qsort :: Ord a => [a] -> [a] qsort [] = [] qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a | a <- xs, a <= x] larger = [a | a <- xs, a > x]
マジ Haskell 凄いんですけど。ちなみに qsort 関数の最初の宣言は順序クラスに属する型(Bool, Char, String, Int, Integer, Float など)の値からなるリストに対してリストを返す、という意味。
追記。filter 使うともっと短くできたw
qsort :: Ord a => [a] -> [a] qsort [] = [] qsort (x : xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs)