SICPを読む(37) 問題 2.4 consの別の表現。
問題2.4
consの別の表現。何故xを返すことが出来るのか。
(define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lambda (p q) p))) (cons 1 2) (car (cons 1 2)) ; 1
展開してみよう。
(car (cons 1 2)) ; (cons 1 2)を(cons x y)で展開。 (car (lambda (m) (m 1 2))) ; carを展開。 ((lambda (m) (m 1 2)) (lambda (p q) p)) ; mに代入する。 ((lambda (p q) p) 1 2) ; (p q)に1 2を代入するとpを返すから、 1
でた。zの所が逆になるのでややこしい。
一番のポイントは最初の展開、x yは1 2で束縛されてる。
cdrは簡単。
(define (cdr z) (z (lambda (p q) q)))
直感的に捉えるのはちょっとムズい。