パスカルの三角形

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]