中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
sicp习题试解 (2.6)
作者:未知 时间:2005-07-27 23:20 出处:CSDN 责编:chinaitpower
              摘要:sicp习题试解 (2.6)
; ======================================================================
;
; 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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有