sicp习题试解 (2.6)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

; ======================================================================

;

; 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航