Haskellでフィボナッチ数列を書く
JavaScriptやってると、「どうやら関数型言語の影響を受けているらしい」と聞くことがある。まあ、functionとか書きまくってるのに関数型言語のこと知らないのも何なので、ちょっと始めてみることにした。
読んでいる本はこれ。
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 299回
- この商品を含むブログ (330件) を見る
なんかRuby界隈でよく使われてるような気がするのでHaskellにした。仲間入り。
さっそくフィボナッチ数列を書いてみる。
main = do print $ map fib [1, 2 .. 10] -- フィボナッチ数列の第n番目の値を返す fib :: Integer -> Integer fib 1 = 1 fib 2 = 1 fib n = fib (n - 1) + fib (n - 2)
実行結果はこれ。
[1,1,2,3,5,8,13,21,34,55]
うん、ちゃんとできてる。
ちなみに、こんな書き方でもOK。
main = do print $ take 10 $ map fib [1 ..] -- フィボナッチ数列の第n番目の値を返す -- ここから下はさっきと一緒 fib :: Integer -> Integer fib 1 = 1 fib 2 = 1 fib n = fib (n - 1) + fib (n - 2)
map fib [1 ..]
で「無限に続くフィボナッチ数列」を作って、take 10
でその先頭10個を取り出している。こういうのがHaskellっぽい(って本に書いてあった)。