問題 2.6
対を手続きで表現することがそれほどの驚きでなければ,手続きを操作出来る言語では,0
と, 1
を足す演算を
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
と実装することで,(少なくとも非負の整数だけを問題とする限りは)数を使わないで済せることが出来ることを考えよう.この表現は発明者 Alonzo Church(λ算法を発明した論理学者)に従い, Church 数 (Church numerals)として知られている.
(zero
と add-1
を使わずに)one
と two
を直接定義せよ.(ヒント: (add-1 zero)
を評価するのに,置換えを使おう.)
(add-1
の繰返し作用させず)加算手続き +
を直接定義せよ.