SICP独習: 問題1.12 Pascalの三角形
ぼちぼち取り組んでいますが、なかなか進みません。やっと問題1.12です。 でも、学生時代は情報系じゃなかったのでこういうのやってなかったからなんだか 新鮮で楽しいです。
問題を解こうと思ったら、やっぱりSchemeがわからないと解けないような気がするので SICPを一時中断してSchemeの勉強を軽くしてました。
で、問題1.12を解いてみました。こんな感じでどうだろう。
#!/usr/bin/env gosh
(define pascal-triangle-each
(lambda (x y)
(cond ((= x 0) 1)
((= x y) 1)
(else
(+ (pascal-triangle-each (- x 1) (- y 1))
(pascal-triangle-each x (- y 1)))))))
(define pascal-triangle-itr
(lambda (x y l)
(if (= x 0) (print (cons 1 l))
(pascal-triangle-itr (- x 1) y (cons (pascal-triangle-each x y) l)))))
(define pascal-triangle
(lambda (count)
(pascal-triangle-itr count count '())))
(map pascal-triangle '(0 1 2 3 4 5 6))
実行結果はこんな感じ。
% gosh pascal-triangle.scm (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)

