今まで関数型言語を敬遠してきたけど

ずっと手続き型言語を扱ってきたから見た目から全然違う関数型言語を敬遠してきたけど、以下のコード及びその意味を知って興味が湧いてきた。

qsort [] = []
qsort (x:xs) = qsort lt_x ++ [x] ++ qsort gteq_x
  where
    lt_x = [y | y <- xs, y < x]
    gteq_x = [y | y <- xs, y >= x]

main = print (qsort [4, 6, 2, 1, 5])
% ghc qsort.hs
% ./a.out
[1,2,4,5,6]

いわゆるクイックソートをしている。書き方が数学っぽい。


あともう一つがこれ。無限リストとかラムダとか。

main = print (take 5 (map (\x -> x*x) [1..]))
% ghc squares.hs
% ./a.out
[1,4,9,16,25]

詳しいことはまた明日書く。