我们已经看到,在作用上,过程也就是一类抽象,它们描述了一些对于数的复合操作,但又并不依赖于特定的数。例如,在定义:
(defined (cube x)(* x x x))
时,我们讨论的并不是某个特定数值的立方,而是对任意的数到其立方的方法。当然,我们也完全可以不去定义这一过程,而总是写出下面这样的表达式:
(* 3 3 3)
(* x x x)
(* y y y)
并不明确的提出cube。但是,这样做将把自己置于一个非常糟糕的境地,迫使我们永远在语言恰好提供了的那些特定基本操作(例如这里的乘法)的层面上工作,而不能基于更高级的操作去工作。我们写出的程序也能计算立方,但是所用的语言却不能表述立方这一概念。人们对功能强大的程序设计语言有一个必然要求,就是能为公共的模式命名,建立抽象,而后直接在抽象的层次上工作。过程提供了这种能力,这也是为什么除最简单的程序语言外,其他语言都包含定义过程的机制的原因。
作为编程者,我们应该对这类可能性保持高度敏感,设法从中识别出程序里的基本抽象,基于它们去进一步构造,并推广它们以创建威力更加强大的抽象。当然,这并不是说总应该采用尽可能抽象的方式去写程序,程序设计专家们知道如何根据工作中的情况,去选择合适的抽象层次。但是,能基于这种抽象去思考确实是最重要的,只有这样才能在新的上下文中去应用它们。高阶过程的重要性,就在于我们能显示的用程序设计语言的要素去描述这些抽象,使我们能像操作其他计算元素一样去操作它们。