« Project Euler - Problem 3 : 素因数分解 | トップページ | Project Euler : Problem 1 ~ 今度は Haskell で »

2009年11月30日 (月)

Haskell で fibonacci

 先日、『プログラミング Haskell』を購入しました。
 以前から「Haskell」に興味があったので、現在、『プログラミング Haskell』を読みながら手探りながら Haskell を勉強しています。

 とりあえず手始めに、フィボナッチ数列に関して関数を書いてみました。
 まず初めに書いたのは、以前 Scheme で作ったものを基にしたものでした。

fibonacci :: Int -> Integer fibonacci n = fib' n 1 1 where fib' 1 a _ = a fib' n a b = fib' (n - 1) b (a + b)

 さらに Haskell では無限リストも扱えるので、こんなものも作ってみました。

fibonacciList :: [Integer] fibonacciList = fib 1 1 where fib a b = a : fib b (a + b) fibonacci :: Int -> Integer fibonacci n = fibonacciList !! (n - 1)

 では、他の人たちは fibonacci のリストをどう書いているかを調べてみると……以下の 2 つがほとんどでした。

fib1 = 1 : 1 : [a + b | (a, b) <- zip fib1 (tail fib1)] fib2 = 1 : 1 : zipWith (+) fib2 (tail fib2)

 確かに再帰的な関数を一行で表す方法は簡潔ですばらしいのですが、別に"zip" とか "zipWith" なんか使って技巧に走らなくても……と思ってしまうのは「Haskell 初心者」だからでしょうか?

« Project Euler - Problem 3 : 素因数分解 | トップページ | Project Euler : Problem 1 ~ 今度は Haskell で »

Haskell」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/46895796

この記事へのトラックバック一覧です: Haskell で fibonacci:

« Project Euler - Problem 3 : 素因数分解 | トップページ | Project Euler : Problem 1 ~ 今度は Haskell で »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ