现在进行到了数学抽象中最关键的一步:让我们忘记这些符号所展示的对象。…(数学家)不应该在这里停步,有许多操作可以应用于这些符号,而根本不必考虑它们到底代表着什么东西。
在前面一章里面关注的是计算过程,以及过程在程序中扮演的角色。在哪里我们还看到了如何使用基本数据(数)和基本操作(算数运算),怎样通过复合,条件,以及参数的使用将一些过程组合起来,形成复合过程。怎样通过define做过程抽象。这里也学习了可以将一个过程看作一类计算演化的一个模式。哪里还g对过程中常见的计算模式做了一些分类和推理,并做了一些简单的算法分析。我们也看到了高阶过程,这种机制能够提升语言的威力,因为它将使我们能够去操作通用的计算方法,并能对他们作出推理。这些都是程序设计中最基础的东西。
在实际的程序设计中常常需要通过程序设计去模拟复杂的现象。这里将讨论程序设计语言中包括的另外一个关键方面;讨论它们所提供的,将数据组合起来,形成 复合数据 的方式。
复合数据的使用也使得我们能够进一步提高程序设计的模块性。如果我们可以直接在将有理数本身当作对象的方式下操作他们,那么也就可能把处理有理数的那些程序部分,于有理数如何表示细节隔离开,这种将程序中处理数据对象的表示部分,与处理数据对象的使用部分相互隔离的技术非常具有一般性,形成了一种称为 数据抽象的设计方式。
于复合过程类似,数据抽象将使得我们能够在程序的不同部分之间建立适当的 抽象屏障 。
在处理复合数据的一个关键性思想是 闭包 的概念—-也就是说用于组合数据对象的的黏合剂不但能够用于组合基本的数据对象,同样也能够用于复合对象。另一个关键的思想是,复合数据对象能够成为以 混合匹配 的方式组合程序模块的 方便界面。后面将通过给出一个利用闭包概念的简单图形语言的方式阐述有关思想。
然后我们要引进 符号表达式 进一步扩大语言的表达能力。符号表达式的基本部分可以是任意符号。
随后我们将转去处理一个程序的不同部分可能采用的不同表示的数据的问题,这就是 通用型 操作符。