练习2.4
(define (new-cons x y)
(lambda (m) (m x y)))
(define (new-car z)
(z (lambda (p q) p)))
;; 使用代换模型,(new-car (new-cons x y))的变换过程如下
(new-car (new-cons x y))
==> (new-car (lambda (m) (m x y)))
==> ((lambda (m) (m x y)) (lambda (p q) p))
==> 此时即为使用过程(lambda (p q) p)去处理(x y)
==> 即等价于定义过程
(define (test p q) p)
然后计算
(test x y)
==> 所以(new-car (new-cons x y))将得到x
;; 由上面的分析, 可以得到
(define (new-car z)
(z (lambda (p q) q)))
练习2.5
(define (new-cons a b)
(* (expt 2 a) (expt 3 b)))
(define (cons-iter x k n)
(if (= (remainder x k) 0)
(cons-iter (/ x k) k (+ n 1))
n))
(define (new-car z)
(cons-iter z 2 0))
(define (new-cdr z)
(cons-iter z 3 0))
练习2.6
(define zero (lambda (f) (lambda (x) x)))
(define (add-1 n)
(lambda (f) (lambda (x) (f ((n f) x)))))
;; 由以上定义的过程以及 1 = 0 + 1 可得如下过程
(define one (add-1 zero))
;; 进行代入变换
(add-1 zero)
==> (lambda (f) (lambda (x) (f ((zero f) x))))
==> (lambda (f) (lambda (x) (f ((lambda (x) x) x))))
==> (lambda (f) (lambda (x) (f x)))
;; 则可得如下过程
(define one (lambda (f) (lambda (x) (f x))))
;; 进而得到如下过程
(define two (lambda (f) (lambda (x) (f (f x)))))
;; 采用代入的方式进行验证
(define two (add-1 one))
(add-1 one)
==> (lambda (f) (lambda (x) (f ((one f) x))))
==> (lambda (f) (lambda (x) (f ((lambda (x) (f x)) x))))
==> (lambda (f) (lambda (x) (f (f x))))
;; 进而得到对于N的定义
(define N (lambda (f) (lambda (x) (f (f ... (f x))))))
;; 则可得到如下过程
(define N (lambda (f) (lambda (x) ((N f) x))))
;; 而对于N+M, 即为对N调用M次add-1
;; 对于N+1
(add-1 N)
==> (lambda (f) (lambda (x) (f ((N f) x))))
==> (lambda (f) (lambda (x) ((one f) ((N f) x))))
(add-1 (N+1))
==> (lambda (f) (lambda (x) ((two f) ((N f) x))))
(add-1 (N+M))
==> (lambda (f) (lambda (x) ((M f) ((N f) x))))
;; 所以推得加法的过程如下
(define (add N M)
(lambda (f) (lambda (x) ((N f) ((M f) x)))))
;; 确实如书中所说:In case representing pairs as procedures wasn't mind-boggling enough,
;; consider that ......
;; Alonzo Church真乃神人也!
分享到:
相关推荐
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
^_^这本教科书所使用的是C语言,也许很多人会说C语言已经过时了,但是,我认为在数据结构的学习中,应该用尽量简单的语言,以免进入了语言的细枝末节中,反而冲淡了主题。实际上在国外的许多大学中(甚至中学),...
SICP-Python版本
Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用
SICP 使用的scheme解释器 以前叫DrScheme
sicp 2.2.4节图形语言的racket程序包,配置路径,C:\Users\Administrator\AppData\Roaming\Racket
SICP 解题集
Learn_sicp 学习sicp的一些代码
SICP CHINESE ENGLISH THE SECOND EDITION SICP CHINESE ENGLISH THE SECOND EDITION
实际上在国外的许多大学中(甚至中学),数据结构和算法分析的课程是选用Scheme(Scheme语言是Lisp的一个现代变种、方言,诞生于1975年)的,例如MIT麻省理工大学极其著名的SICP课程。呵呵,语言又能说明什么呢?...
sicp_notes SICP笔记和练习 资源 笔记 使用第一版,最高为ex 1.24。 从ex 1.31开始切换到第二版。
SICP 习题答案 计算机程序的构造和解释 1-3章 习题答案
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh
请参考那些正在学习SICP的人。 笔记 如果你想在 gauch 中使用随机函数 (use math.mt-random) (define m (make <mersenne> :seed (sys-time))) (mt-random-integer m 1000) (define (random n) (mt-random-integer ...
SICP习题解答,主要第一章的内容习题答案
资源来自pypi官网。 资源全名:sicp-0.0.1b102.dev4.tar.gz
sicp-in-python(中文版+英文版)PDF 背景. SICP 全称Structure and Interpretation of Computer Programs,翻译过来叫《计算机程序的构造和解释》使用python
资源名称:sicp 和 操作系统:精髓与设计原理第七版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。