业余编程爱好者
分类: 敏捷开发
2013-02-18 15:13:58
《SICP》第二章的学习,断断续续持续了有大半个月了,今天我要结束第二章的学习,计划进入第三章。下面趁自己还没完全忘光,小结下第二章学习:
这章主要讲了如何将数据组合起来,形成复合数据。通过序对和列表这种基本数据结构来保存数据,使用一系列的过程来构造复杂的复合数据。在构造复合数据的过程中,要经过良好的设计,将底层实现的细节有效的屏蔽起来。使得在操作复合数据时,不必关系每种复合数据内部的细节。
为了解释复合数据的过程中如何进行良好的抽象屏障,本章给出了一个极端的例子。完全通过过程来实现基本的数据类型,如整数,并给出了基本运算过程+1等。通过这个例子来说明,数据内部的实现过程可以是多种多样甚至是不可思议的,只要满足运算法则,则可以不管它内部的实现细节。
后面讲了使用不同的构造方法来构造复合数据,有可能会出现不同的运算结果,在这里一定要当心。接着便到了list这种基本数据结构上场了,通过序对来实现list,介绍了对列表和树的映射操作。使用序列作为约定的界面,可以将很多过程看做是信号流图。过程可以看做对序列做map、filter、accumulate的组合来得到结果,也就是模块化的操作。初始的数据从一段流入,经过几个模块的过滤、映射以及累积,流出的便是需要的数据。从序列的操作中提取几个共有的模式,讲这几个模式编写成通用的模块,就可以处理很多常见的问题,大大节省了编程的时间,提高了解决问题的效率。设计一个图形语言,这一节我没有学习。大概讲的还是怎么设计复合数据以及操作它们的过程,来实现我们想要的功能。
2.3节的符号数据,我也是过了一遍,并没有对其中的例子进行练习。通过将符号作为参数,在过程中比较符号参数来实现对应的操作,给予了编程极大的灵活性。这节这后的内容我没有认真练习,因为实在是太多太复杂了。我准备在见识到lisp更美妙的特性后,在来好好的补习下第二章后面的内容。
小结一下,《SICP》第二章给出了lisp之所以叫lisp的最重要的两样特性,一个是列表作为约定的数据结构来制造复合数据,另一个是符号操作,因为lisp一开始设计时就是为了方便的进行符号操作。在第三章的学习时,我将继续把第二章中一些重要的我没理解的lisp概念和技巧弄弄清楚,回头再来好好做下第二章后面的练习题。