天天看点

SICP 笔记 Lec2b Compound Data Part 3 & Part 4Lec2b 复合数据Compound Data

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)。

继续阅读