GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Recursive-Example-arg-of-1-or-2.html ・ emacs-doc.conao3.com

1または2の引数

まず、引数の値が1の場合はどうなるでしょうか?

この関数は、ドキュメント文字列の後に if 式を持っています。これは number の値が 1 と等しいかどうかを判定し、そうであれば Emacs は if 式の then 部を評価し、関数の値として数値 1 を返します。(1行の三角形には、小石が1つ入っています。)

ただし、引数の値が 2 であるとします。この場合、Emacs は if 式の else 部分を評価します。

else部分は加算、triangle-recursivelyへの再帰呼び出し、およびデクリメント処理で構成されており、次のような形になります:

(+ number (triangle-recursively (1- number)))

Emacsがこの式を評価する際は、まず最内層の式が評価され、次に他の部分が順に評価されます。具体的な手順は以下の通りです。

ステップ 1   最内層の式を評価する。

最内側の式は (1- number) なので、Emacs は number の値を 2 から 1 に減算します。

ステップ 2   triangle-recursively 関数を評価する。

Lispインタプリタはtriangle-recursivelyの個別のインスタンスを生成します。この関数が自身に含まれていることは問題になりません。Emacsは、ステップ1の結果を、このtriangle-recursively関数のインスタンスが使用する引数として渡します。

この場合、Emacsは引数1を指定してtriangle-recursivelyを評価します。つまり、このtriangle-recursivelyの評価結果は1となります。

ステップ 3   number の値を評価する。

変数 number は、+ から始まるリストの2番目の要素であり、その値は 2 です。

ステップ 4   + 式を評価する。

+ 式は2つの引数を受け取り、1つ目は number の評価(ステップ3)から、2つ目は triangle-recursively の評価(ステップ2)から得られます。

加算の結果は2と1の和となり、数値3が返されます。これは正しい結果です。2行の三角形には、3個の小石が入っています。