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]
再帰的定義ばんざい!!