暇にまかせてSICPを読んでみようと思った。

ネット上で読める関数型言語の教科書、Structure and Interpretation of Computer Programs(通称SICP)を暇に任せて読んでみる。英語だらけで挫折しそうだから、予備知識を持っている一章も飛ばさずに読む。なんかアッカーマン関数が分からなかったので紙に書きながらやる。
で、パスカルの三角形で詰まった。とりあえず二項定理でやってみるけど何か反則くさい。

(define (ps n r)
  (if (or (= n r) (= 0 r)) 1
      (/ (* (ps n (- r 1)) (+ 1 (- n r))) r)))
-------------------------------------------------
(map (lambda (x) (ps 4 x)) '(0 1 2 3 4))
gosh> (1 4 6 4 1)

というわけでグーグル先生に質問してみた。

SICP Reading's Wiki - jmuk
http://www.csus4.net/hiki/SICPReading/?jmuk
-------------------------------------------------
(define (pt l x)
  (cond ((= l 0) 1)
        ((or (= x 0) (= x l)) 1)
        (else (+ (pt (- l 1) (- x 1)) (pt (- l 1) x)))))

ちょwwwwwwwwwwwww
これで動くんだ!自然に定義してるだけなのに。普通のプログラマにとっては常識なのかもしれないけどすごく感動した!すげえすげえ!