2.1 Introduction to Data Abstraction

ここまで読んだ。
眠い… Extended Exerciseは後で(気が向いたら)。

Exercise 2.6(チャーチ数)

;; Exercise 2.6 
;; Church Numeral

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

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

; (add-1 zero)
; => (lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x))))
; => (lambda (f) (lambda (x) (f ((lambda (x) x) x))))
; => (lambda (f) (lambda (x) (f x)))

(define one
  (lambda (f) (lambda (x) (f x))))

; (add-1 one)
; => (lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) (f x))) f) x)))))
; => (lambda (f) (lambda (x) (f ((lambda (x) (f x) x)))))
; => (lambda (f) (lambda (x) (f (f x))))

(define two
  (lambda (f) (lambda (x) (f (f x)))))

(define (add a b)
  (lambda (f) (lambda (x) ((a f) ((b f) x)))))

(define (mul a b)
  (lambda (f) (a (b f))))

(define (to-num a)
  ((a (lambda (n) (+ 1 n))) 0))

keyword:λ計算に答えがあるっぽいので起きたら答え合わせ。