qsort
in Ruby
def sort(f, array) return [] if array.empty? pivot = array[0] before = sort(f, array[1..-1].delete_if { |x| not f.call(x, pivot) }) after = sort(f, array[1..-1].delete_if { |x| f.call(x, pivot) }) return (before << pivot).concat(after) end
in Haskell
qsort _ [] = [] qsort f (x:xs) = before ++ (x : after) where before = qsort f (filter (not . (f x)) xs) after = qsort f (filter (f x) xs)
これで言語の能力をどうこう言うつもりは無いけれど、あんま変わらんなぁ。x:xs と出来る所(パターンマッチング)は確かに強力だけど。Haskellの方が定義っぽい書き方になっているけど、それもwhere文のお蔭に見える。