鍋あり谷あり

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

初めての Haskell の続き

昨日の続き。
jmuk さんや id:KimuraShinichi さんの助言を受けて改良した。faray 列版。昨日のよりも長くなっているような気もするが、そういうこともある:

import System
import Numeric

faray m a b = f a b
  where 
    f a@(an,ad) b@(bn,bd) | d < m = f a c ++ f c b
                          | True  = [a]
      where
        c = ( an + bn, d )
        d = ad + bd
irr m = faray m (0,1) (1,1) ++ [(1,1)]

main = test $ irr . (+1) . head
  where 
    test f = getArgs >>= putStr . show . f . argToNum
    argToNum = map  $ fst . head . readDec

出題が、分母が N 以下 となっていたので、題意にあうように +1 した。
見た感じはだいぶ Haskell っぽくなったような気もするが、アルゴリズムという点からは、ちっともそれらしくない。

次は何しようかな。