eintr: Building Robots

 
 11.3.1 Building Robots: Extending the Metaphor
 ----------------------------------------------
 
 It is sometimes helpful to think of a running program as a robot that
 does a job.  In doing its job, a recursive function calls on a second
 robot to help it.  The second robot is identical to the first in every
 way, except that the second robot helps the first and has been passed
 different arguments than the first.
 
    In a recursive function, the second robot may call a third; and the
 third may call a fourth, and so on.  Each of these is a different
 entity; but all are clones.
 
    Since each robot has slightly different instructions—the arguments
 will differ from one robot to the next—the last robot should know when
 to stop.
 
    Let’s expand on the metaphor in which a computer program is a robot.
 
    A function definition provides the blueprints for a robot.  When you
 install a function definition, that is, when you evaluate a ‘defun’
 macro, you install the necessary equipment to build robots.  It is as if
 you were in a factory, setting up an assembly line.  Robots with the
 same name are built according to the same blueprints.  So they have the
 same model number, but a different serial number.
 
    We often say that a recursive function “calls itself”.  What we mean
 is that the instructions in a recursive function cause the Lisp
 interpreter to run a different function that has the same name and does
 the same job as the first, but with different arguments.
 
    It is important that the arguments differ from one instance to the
 next; otherwise, the process will never stop.