問題 2.4

(define (cons x y)
  (lambda (m) (m x y)))

(define (car z)
  (z (lambda (p q) p)))

;(car (cons x y))->xになるのを説明せよといわれても、
;コードをみれば自明であるとしか言いようがない。
;これにたいするcdrは

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

;となる

;(car (cons 1 2))
;-> 1
;(cdr (cons 1 2))
;-> 2

;ok

;一応プロセスをしめしてみる。

;(car (cons 1 2))
;((cons 1 2) (lambda (p q) p))
;((lambda (m) (m 1 2)) (lambda (p q) p))
;((lambda (p q) p) 1 2)
;p -> 1
;(cdr (cons 1 2))
;((cons 1 2) (lambda (p q) p))
;((lambda (m) (m 1 2)) (lambda (p q) p))
;((lambda (p q) q) 1 2)
;q -> 2

;こっちのconsのほうが、2.1.3のconsより簡潔で美しいコードだなー