`
SavageGarden
  • 浏览: 219930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SICP学习笔记 2.1.3 数据意味着什么

    博客分类:
  • SICP
 
阅读更多

    练习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真乃神人也!
 
0
3
分享到:
评论

相关推荐

    SICP 习题答案

    - **过程**:在SICP中,过程是λ演算中的核心概念,代表可执行的计算操作。 - **组合器**:通过组合简单的过程来构建复杂的过程,这是λ演算的基本思想,也是编程中的模块化原则。 2. **函数式编程**: - **纯...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    SICP习题解答,主要第一章的内容习题答案

    SICP强调程序也是数据,这意味着我们可以编写程序来生成或修改其他程序。宏就是这样的工具,它们允许我们在编译时扩展语言,创建新的语法结构。这部分习题可能涉及到宏的定义和使用,以及如何利用宏解决实际问题。 ...

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    SICP(python中文带书签)

    在Python中实现SICP的挑战在于,Python的语法和Lisp有很大区别,但这也为学习者提供了思考不同编程范式的机会。例如,Python的面向对象特性可以用来模拟SICP中的一些过程抽象,而Lisp中的动态作用域在Python中需要...

    数据结构与算法分析学习笔记chm

    ^_^这本教科书所使用的是C语言,也许很多人会说C语言已经过时了,但是,我认为在数据结构的学习中,应该用尽量简单的语言,以免进入了语言的细枝末节中,反而冲淡了主题。实际上在国外的许多大学中(甚至中学),...

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    a_book_sicp_py

    3. 计算机科学的基础概念:《计算机科学的构造与解释》(SICP)一书涵盖了计算机科学的基础概念,例如程序的解释、计算过程和数据抽象。这些概念是构建更高级抽象和理解计算机如何操作数据的基石。 4. 使用函数构建...

    SICP LISP AI

    4. **数据结构和抽象**:SICP介绍了各种数据结构,如列表、树和队列,以及如何使用递归和高阶函数来操作它们。此外,还讨论了如何通过抽象隐藏实现细节,提高代码的复用性和可维护性。 5. **控制结构和计算的表示**...

    sicp_notes:SICP笔记和练习

    这意味着笔记中可能包含了第一版和第二版的部分差异,比如新的练习题或更新的解释。 SICP的第一部分主要讨论了基本的程序构造,如变量、过程、数据结构和控制结构。这部分会引导读者理解如何用Lisp语言来实现这些...

    SICP-Python版本

    SICP-Python版本

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    在压缩包子文件的文件名称列表中,我们看到唯一的一个条目"sicp-0.0.1b102.dev4",这通常意味着压缩文件解压后会有一个同名的目录,里面包含了这个Python库的所有源代码、元数据、文档以及可能的测试文件等。...

    SICP(计算机体系结构)

    - **2.1.3 数据的本质**: 深入探讨数据的概念。 - **2.1.4 扩展练习:区间算术**: 通过一个具体的案例来巩固所学知识。 - **2.2 层次数据与闭包属性** - **2.2.1 序列的表示**: 讨论序列数据结构的设计与实现。 ...

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    通过学习SICP,学生将能够理解如何设计、分析和实现复杂的程序系统,培养出强大的抽象思维能力。 课程内容涵盖了以下几个关键知识点: 1. **基本编程概念**:包括变量、数据结构(如列表、树)、控制结构(条件...

    sicp 2016 from

    ### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...

    sicp-Structure and Interpretation of Computer Programs

    SICP不仅在MIT内部被广泛用作教学材料,而且在全球范围内也享有极高的声誉,被视为学习计算机科学理论基础的必读之作。 #### 二、书籍内容概览 SICP的内容涵盖了程序设计的基本概念、过程抽象、数据抽象、模块化...

Global site tag (gtag.js) - Google Analytics