; ====================================================================== ; ; Structure and Interpretation of Computer Programs ; (trial answer to excercises) ; ; 计算机程序的构造和解释(习题试解) ; ; created: code17 04/23/05 ; modified: ; (保持内容完整不变前提下,可以任意转载) ; ======================================================================
;; SICP No.2.6
;; 定义1 ;; one = add-1 zero ;; = (lambda (f) (lambda (x) (f ((zero f) x)))) ;; = (lambda (f) (lambda (x) (f x))) (define one (lambda (f) (lambda (x) (f x))))
;; 定义2 ;; 同理 two = add-1 one 可得 (define two (lambda (f) (lambda (x) (f (f x)))))
;; 由替代过程推理可得公式 ;; (define n-th (lambda (f) (lambda (x) (f^n x))))
;; add 可直接定义为 (define (add a b) (lambda (f) (lambda (x) ((b f) ((a f) x)))))
;; 另外,为了便于检查定义的正确性,我们定义了一对转换函数, ;; 进行普通数和Church数之间的转换输出
(define (cn-to-n cn) ((cn (lambda (i) (+ i 1))) 0)) (define (n-to-cn n) (if (= n 0) (lambda (f) (lambda (x) x)) (add-1 (n-to-cn (- n 1)))))
;; Test-it: ;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc. ;; > one ;; #<procedure:one> ;; > two ;; #<procedure:two> ;; > (cn-to-n one) ;; 1 ;; > (cn-to-n two) ;; 2 ;; > (define five (add-1 (add-1 (add-1 two)))) ;; > (cn-to-n five) ;; 5 ;; > (define seven (n-to-cn 7)) ;; > (cn-to-n seven) ;; 7 ;; > (define twelve (add five seven)) ;; > (cn-to-n twelve) ;; 12

|