本文主要是介绍SICP 笔记 Lec2b Compound Data Part 3 Part 4,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Lec2b 复合数据Compound Data
Part 3
41" - 56"
从有理数类比到用二维坐标来表示点的位置,而两个点即可表示一个线(向量)。
1.
引入Closure(闭包)的概念
我的理解:
所有的object可以被“完整”地封装,作为其他object的一部分。这个过程可以无穷无尽地进行下去,其所有的性质不会损耗。
即“道生一,一生二,二生三,三生万物”。
(如fortan就的数组(arrays)就不具有这种性质,array的元素不能是array。
2.
利用抽象层来分隔概念,强调抽象(Abstraction)的重要性。
Name 通过给每个小的成分命名,来分隔过程。使得其中一些部分的改变不需要影响全局。
Part 4
56" - 1'16"
再次强调Abstraction的重要性,愈发地模糊了data和procedure的边界。
1.
衡量标准
Contracts
衡量标准也可以作为概念的另一种表达方式。
We can say a rational number really is just this axiom(below)
Eg.
IF X = (MAKE-RAT N D)
THEN
(NUMBER X)/(DENOM X) = N/D
2.
抽象的最底层,没有所谓pairs的定义,而是“绝对的”抽象
(define (cons a b)
(lambda (pick)
(cond ((= pick 1) a)
((= pick 2) b))))
(define (car x) (x 1))
(define (cdr y) (y 1))
从这里可以发现,“有理数”与其说是一个“数据”结构,不如说是返回的一个lambda的procedure。
Q&A:
Q:
这些有理数的procedure存储在何处?
A:
procesudure也是一个object。
过程不仅仅是做“做事情”,还是概念实体(conceptual entities),是对象(object)。
这篇关于SICP 笔记 Lec2b Compound Data Part 3 Part 4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!