2.21.2010

Haskellの表現力に脱帽。

あるN番目の数が素数かどうかを判定するプログラムについてちょろっと調べてたら、
http://www.rcc.ritsumei.ac.jp/~kaki/lambda/entries.rb?num=3
にHaskellによる実装が載ってた。

それに寄れば

sieve (x:xs) = (x : sieve (filter (\y -> rem y x /= 0) xs))
primes = 2 : sieve [3,5..]

main = getLine >>= print . (primes !!) . (subtract 1) . read

という、「ナニソレ?」レベルのHaskellの高い表現力による解が。

基本的にはフィルタを通しているだけだから、うまく書けばLISPでも同等の表現ができると思う。
当然OCamlなんかでも。となると、Haskellの表現力じゃなく、関数型言語の表現力なのかなぁ?
でも、やっぱりこの短さ、美しさを見せられると、唸ってしまう。

Haskell、放り出しちゃったけど、もう一回真面目に取り組んでみようかなぁ。

0 件のコメント: