Haskell プログラム集


Haskell でパスカルの三角形を作ってみた。

パスカルの三角形の第0段は、[1] だから、

pascal 0 = [1]

第1段は、[1,1] だから、

pascal 1 = [1,1]

第2段以降は、両端が1で、間は上の段の隣合う2項を足しあわせたものだから、

pascal n = [1] ++ add2 (pascal (n-1)) ++ [1]
  where add2 xs = zipWith (+) xs (tail xs)

したがって完成したプログラムは次のようになる。

pascal n :: Int -> [Int]
pascal 0 = [1]
pascal 1 = [1,1]
pascal n = [1] ++ add2 (pasical (n-1)) ++ [1]
  where add2 xs = zipWith (+) xs (tail xs)

実行結果は次のようになる。

Main> pascal 4
[1,4,6,4,1]

再帰的定義ばんざい!!