パスカルの三角形

id:hyuki さんのを見て。

 cf. http://sicp.g.hatena.ne.jp/hyuki/20060512/pascal

といっても Scheme はよくわからんので Ruby版(id:rubyco:20060429:pascal)を見ながら書いた。

combination n k | k == 1 = 1
                | k == n = 1
                | otherwise = (combination (n-1) k) + (combination (n-1) (k-1))

line n = map (combination n) [1..n]

pascalTriangle = do mapM putStrLn (map (show . line) [1..10])

実行。

*Main> pascalTriangle
[1]
[1,1]
[1,2,1]
[1,3,3,1]
[1,4,6,4,1]
[1,5,10,10,5,1]
[1,6,15,20,15,6,1]
[1,7,21,35,35,21,7,1]
[1,8,28,56,70,56,28,8,1]
[1,9,36,84,126,126,84,36,9,1]
カテゴリー: Haskell パーマリンク

2 Responses to パスカルの三角形

  1. [1..100]>>=pen のコメント:

    刺激されて私も書いてみました。
    http://hpcgi2.nifty.com/1to100pen/wiki/wiki.cgi?p=%CB%E8%C6%FCHaskell の 2006-05-12

  2. takatoh のコメント:

    >刺激されて私も書いてみました。
    うわ,短っ!! mapと再帰を使って無限リストを作っちゃうとこがHaskellらしいですねぇ。負けずにやってみます。といってもmapの関数を変えるだけですけど。

    pascalTriangle = [1]:map (¥xs -> zipWith (+) (0:xs) (xs ++ [0])) pascalTriangle

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください