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文のお蔭に見える。