11.3.1 构建机器人:扩展隐喻

有时将运行的程序看作是执行任务的机器人是有帮助的。在执行其任务时,递归函数调用第二个机器人来帮助它。第二个机器人与第一个机器人在每个方面都是相同的,除了第二个机器人帮助第一个机器人并传递了不同于第一个机器人的参数。

在递归函数中,第二个机器人可能调用第三个;第三个可能调用第四个,依此类推。每个都是一个不同的实体;但都是克隆体。

由于每个机器人都有略有不同的指令——参数将从一个机器人到另一个机器人不同——最后一个机器人应该知道何时停止。

让我们扩展一下计算机程序是机器人的隐喻。

函数定义提供了一个机器人的蓝图。当您安装函数定义时,也就是当您评估defun宏时,您安装了构建机器人所需的设备。这就好像您在工厂中设置了一个装配线。具有相同名称的机器人是根据相同的蓝图构建的。因此,它们具有相同的型号,但不同的序列号。

我们经常说一个递归函数“调用自身”。我们的意思是递归函数中的指令导致Lisp解释器运行一个具有相同名称且执行与第一个相同的工作的不同函数,但具有不同参数。

参数从一个实例到下一个必须不同;否则,这个过程将永远不会停止。