SICP独習会〜データとは何か(問題2.4〜)〜


 ここでデータの定義にふれているのだが、いまいち言っていることが飲み込めないでいる。ここはしばらくしたら、もう一度読み直した方がよさそうである。

問題2.4

解答

(define (cdr z)
  (z (lambda (p q) q)))


以下が展開プロセス。


まず代入。

(cdr (cons 1 2))

次に展開。

((lambda (m) (m 1 2)) (lambda (p q) q))

一つ目のλ式に、二つ目のλ式を作用させる

((lambda (lambda (p q) q) (lambda (p q) q) 1 2)

で、作用させた結果、

((lambda (p q) q) 1 2)

「1、2」の引数をλ式に作用させる

(lambda (1 2) q)

で、終了。


2

問題2.5

問題の意味がよく分からないのでパス。

問題2.6

以下のように、定義。

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

で、置き換えをしていったのだが…

(add-1 zero)

(add-1 (lambda (f) (lambda (x) x)))

((lambda (f) (lambda (x) (f ((n f) x)))) (lambda (f) (lambda (x) x)))

((lambda (x) ((lambda (f) (lambda (x) x) ((n (lambda (f) (lambda (x) x))) x)))))

((lambda (f) (lambda (x) (x)) f) x)


これ以上、よく分からなかった。


計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)
このチャーチ数、すごく興味深かった。計算可能な関数だけで、数値さえも定義できるなんて。図書館で、計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)を借りてたのでもう少し、ここを掘り込んでみたい。