鍋あり谷あり

テーマを決めずに適当に書いています。

初めての haskell その2

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 でやっていたのと同じ計算をしようとしている以上、関数型っぽくならないのは仕方ないか。