闭包特性
cons
构建的序对其实是两个指针,分别指向序对的两个元素,通过 car
和 cdr
获取,cons
构建的序对不仅能包含基础数据,同样也可以包含序对。类似这种能够通过同样的构建方法将自身作为元素构建的特性称为闭包特性。所以,不仅序对拥有闭包特性,同样程式也拥有同样的特性,因为程式的元素也可以由程式构成。
列表与树形结构
通过上述关于序对知识点的了解,如果使用 cons
嵌套构建将形成一组有序数据对象列表,它是序列数据结构的一种构建形式。除了 cons
嵌套的方式外,Scheme 提供了基础程式 list
构建列表,也就是说下列两个结构完全相等:
(list <a1> <a2> ... <an>)
(cons <a1>
(cons <a2>
(cons ...
(cons <an> nil))))
如果对列表进行嵌套构建,将形成树形结构,例如 (list (list 1 2) (list 3 4))
,树形结构的运算是递归的,不过也可以将叶子节点转换为列表,便于统一使用列表的操作。
在列表表达方式统一的情况下,可以为其抽象 map
、filter
和 accumulate
等运算程式,相当于为列表建立抽象屏障,这样做有利于避免使用列表时需要关注它的具体实现,为底层实现的修改在整个程序系统上的统一性打下良好基础。
分层设计
分层设计的观念指出,在构建复杂系统时需要按一系列的不同层级设计,每个层级只组合当前层级的基础层级方法,每个层级也只作为上一层级的基础层级使用。在语言的分层设计中,每个层级都会运用自己的基础元素,并进行组合和抽象。
分层设计帮助程式变得健壮,它保证了基础协议实现的细微变化对于整个程序是一致的。通俗地讲,分层设计使系统的每个层级都提供了表达系统的不同词汇,以及改变系统的不同能力。