haskell らしいプログラムであるような気が全くしないんだが、書けた。
import System import Numeric faray m a b | (snd a)+(snd b)<m = (faray m a c) ++ (faray m c b) | True = [a] where c = ((fst a)+(fst b),(snd a)+(snd b)) irr m = ( faray m (0,1) (1,1) ) ++ [(1,1)] argToNum x = fst $ head $ readDec $ head x main = getArgs >>= \a -> putStr $ show $ irr $ argToNum a
http://www.sampou.org/cgi-bin/haskell.cgi?p=Programming%3a%b6%cc%bc%ea%c8%a2%3a%c0%b0%bf%f4%cf%c0&l=jp#1の計算と比べると、map したり cycle したりしてない分、やっぱり関数型っぽくない。遅延評価も関係ないし。
ruby や C でやっていたのと同じ計算をしようとしている以上、関数型っぽくならないのは仕方ないか。