実行中のプログラムを、仕事をこなすロボットとして捉えると分かりやすいことがあります。再帰関数は仕事を行う際、補助として2台目のロボットを呼び出します。この2台目のロボットは、1台目のロボットを助けるという点と、1台目とは異なる引数が渡されている点を除けば、あらゆる面で1台目と同一です。
再帰関数において、2台目のロボットが3台目を呼び出し、3台目が4台目を呼び出す、といった具合に続く。これらはそれぞれ異なる個体だが、すべてクローンである。
ロボットごとに指示がわずかに異なるため—引数もロボットごとに異なります—最後のロボットは、いつ停止すべきかを判断できる必要があります。
コンピュータプログラムをロボットとする比喩について、詳しく見ていきましょう。
関数定義は、ロボットの設計図となります。関数定義をインストールする、つまりdefunマクロを評価すると、ロボットを製造するために必要な設備が導入されます。それはまるで工場で、組立ラインをセットアップしているかのようです。同じ名前のロボットは、同じ設計図に基づいて製造されます。そのため、モデル番号は同じですが、シリアル番号は異なります。
再帰関数は「自分自身を呼び出す」とよく言われます。これは、再帰関数内の命令によって、Lispインタプリタが、最初の関数と同じ名前で同じ処理を行うものの、引数が異なる別の関数を実行することを意味しています。
事例ごとに論拠が異なることが重要です。そうでなければ、プロセスが止まることはありません。