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 件のコメント:
コメントを投稿