练习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中,过程是λ演算中的核心概念,代表可执行的计算操作。 - **组合器**:通过组合简单的过程来构建复杂的过程,这是λ演算的基本思想,也是编程中的模块化原则。 2. **函数式编程**: - **纯...
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
SICP强调程序也是数据,这意味着我们可以编写程序来生成或修改其他程序。宏就是这样的工具,它们允许我们在编译时扩展语言,创建新的语法结构。这部分习题可能涉及到宏的定义和使用,以及如何利用宏解决实际问题。 ...
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...
在Python中实现SICP的挑战在于,Python的语法和Lisp有很大区别,但这也为学习者提供了思考不同编程范式的机会。例如,Python的面向对象特性可以用来模拟SICP中的一些过程抽象,而Lisp中的动态作用域在Python中需要...
^_^这本教科书所使用的是C语言,也许很多人会说C语言已经过时了,但是,我认为在数据结构的学习中,应该用尽量简单的语言,以免进入了语言的细枝末节中,反而冲淡了主题。实际上在国外的许多大学中(甚至中学),...
《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...
3. 计算机科学的基础概念:《计算机科学的构造与解释》(SICP)一书涵盖了计算机科学的基础概念,例如程序的解释、计算过程和数据抽象。这些概念是构建更高级抽象和理解计算机如何操作数据的基石。 4. 使用函数构建...
4. **数据结构和抽象**:SICP介绍了各种数据结构,如列表、树和队列,以及如何使用递归和高阶函数来操作它们。此外,还讨论了如何通过抽象隐藏实现细节,提高代码的复用性和可维护性。 5. **控制结构和计算的表示**...
这意味着笔记中可能包含了第一版和第二版的部分差异,比如新的练习题或更新的解释。 SICP的第一部分主要讨论了基本的程序构造,如变量、过程、数据结构和控制结构。这部分会引导读者理解如何用Lisp语言来实现这些...
SICP-Python版本
Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用
SICP 使用的scheme解释器 以前叫DrScheme
在压缩包子文件的文件名称列表中,我们看到唯一的一个条目"sicp-0.0.1b102.dev4",这通常意味着压缩文件解压后会有一个同名的目录,里面包含了这个Python库的所有源代码、元数据、文档以及可能的测试文件等。...
通过学习SICP,学生将能够理解如何设计、分析和实现复杂的程序系统,培养出强大的抽象思维能力。 课程内容涵盖了以下几个关键知识点: 1. **基本编程概念**:包括变量、数据结构(如列表、树)、控制结构(条件...
- **2.1.3 数据的本质**: 深入探讨数据的概念。 - **2.1.4 扩展练习:区间算术**: 通过一个具体的案例来巩固所学知识。 - **2.2 层次数据与闭包属性** - **2.2.1 序列的表示**: 讨论序列数据结构的设计与实现。 ...
### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...
SICP不仅在MIT内部被广泛用作教学材料,而且在全球范围内也享有极高的声誉,被视为学习计算机科学理论基础的必读之作。 #### 二、书籍内容概览 SICP的内容涵盖了程序设计的基本概念、过程抽象、数据抽象、模块化...