其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
sicp习题试解 (2.6)

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

; ======================================================================
;
; 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



相关文章

相关软件