# 1.2函数及其生成的过程

> 译者： [https://sicp.comp.nus.edu.sg/chapters/11](https://sicp.comp.nus.edu.sg/chapters/11)



现在，我们考虑了编程的元素：我们使用了原始算术运算，我们将这些运算组合在一起，并且通过将它们声明为复合函数来抽象出这些复合运算。 但这还不足以使我们能够说出自己知道如何编程。 我们的情况类似于某个人，他们了解棋子在棋子中如何运动的规则，但对典型的开局，战术或策略一无所知。 像新手棋手一样，我们还不知道该领域中的常见用法。 我们缺乏哪些动作值得做出的知识（哪些功能值得声明）。 我们缺乏经验来预测移动（执行功能）的后果。

可视化所考虑动作的后果的能力对于成为专家程序员至关重要，就像在任何合成的，创造性的活动中一样。 例如，要成为一名专业摄影师，必须学习如何观察场景，并知道在每种可能的曝光和显影条件下 [[1]](11#footnote-1) ，每个区域在印刷品上会显得很暗。 只有这样，才能向后推理，规划取景，照明，曝光和显影以获得所需的效果。 编程也是如此，我们在其中计划流程要采取的行动过程，并在程序中通过程序控制流程。 要成为专家，我们必须学会可视化各种功能生成的过程。 只有掌握了这样的技能，我们才能学会可靠地构建表现出所需行为的程序。

函数是计算过程的_局部演化_的模式。 它指定过程的每个阶段如何在上一个阶段的基础上构建。 我们希望能够对由功能指定局部演化的过程的整体或_全局_行为做出陈述。 通常这很难做到，但是我们至少可以尝试描述一些典型的过程演化模式。

在本节中，我们将研究一些简单函数生成的常见&lt;quote&gt;形状&lt;/quote&gt;。 我们还将研究这些过程消耗重要的时间和空间计算资源的速率。 我们将考虑的功能非常简单。 它们的作用就像摄影中的测试图案一样：作为过于简化的原型图案，而不是本身具有实际意义的实例。

* * *

[[1]](11#footnote-link-1) The textbook was written at a time when photography commonly involved photographic development, a chemical process for making paper prints from photographic film.

