2022-05-19 03:42
我们之前已经见过定义了, 它也能直接地运用于过程.
我们曾说"起名字"是最基本的抽象方式, 那么什么是抽象呢?
抽象有两个基本的方面, 一个方面是从各种东西中寻找共同的模式, 另一个方面是将许多概念组合成一个概念, 在思考这个概念时, 我们从整体出发, 而忽略次要的细节.
实际上, 名是提示我们概念的整体性质的助记符, 所以起名字是最基本的抽象方式.
而且, 当我们寻找到共同的模式时, 我们也往往会忍不住给它起一个名字. 然后, 我们将这个名字所蕴含的概念用于简化它所能应用的一切事物.
以下是一则典型的例子, 或许读者应该咀嚼一小会儿.
为了避免误解, 我们应该指出, 定义的次序在某种程度上具有随意性, 比如这里pi, square和area的定义不论怎样排列都不会影响接下来(area 5)的结果. 这种自由, 在某种程度上, 可以用来提高可读性. 可读性是程序最重要的方面, 因为程序是供人阅读的.
这里area的定义基于pi和square, 这是很低矮的抽象之塔. 当然, 抽象的塔也可以搭得很高很高. 这其中的关键在于, 有的抽象仅仅是功能性的增强, 而有的抽象则在概念上提升了抽象的层次. 也就是说, 它提供了一种屏障, 让人们在思考这层抽象时没有必要思考在它之下的抽象. 这种抽象层次的划分是最朴素也最强大的控制复杂度的手段, 任何实际的工程学和抽象的工程学都离不开它. 以我之见, 魔法的许多方面是工程学, 而且是最纯粹的工程学, 因为它常常无需考虑现实的代价, 而仅仅只需要人能够想出来而已.
注记: 鉴于过程的定义经常出现, Scheme中提供了一种简化但等效的句法用于定义过程. (简化而等效的句法一般被称为句法糖.)
以之前上面的例子为例, 通过这个句法糖, 它可以写成如上形式.