評価が別のリスト内にあるリストに適用される場合、外側のリストは、自身が評価される際の情報として、最初の評価で返された値を利用することがあります。これが、内側の式が先に評価される理由です。それらが返す値が、外側の式で使用されるためです。
別の加算例を評価することで、この過程を調べることができます。次の式の後にカーソルを置き、C-x C-eと入力してください:
(+ 2 (+ 3 3))
エコーエリアに数字の8が表示されます。
具体的には、Lispインタプリタはまず内側の式 (+ 3 3) を評価して値 6
を返し、次に外側の式をあたかも (+ 2 6) と書かれているかのように評価して値 8
を返します。これ以上評価すべき外側の式はないため、インタプリタはその値をエコー領域に出力します。
キーストローク C-x C-e によって呼び出されるコマンドの名前は、容易に分かります。その名前は
eval-last-sexp です。文字 sexp は「記号式」の略であり、eval
は「評価」の略です。このコマンドは、最後の記号式を評価します。
試しに、式の直後の次の行の先頭や、式の中にカーソルを置いて、式を評価してみることもできます。
その式の別のコピーがこちらです:
(+ 2 (+ 3 3))
式の直後にある空行の先頭にカーソルを置き、C-x C-e と入力すると、エコーエリアには依然として値 8
が出力されます。次に、カーソルを式の中に配置してみてください。最後から2番目の括弧の直後(つまり、最後の括弧の上に重なるように)に配置すると、エコーエリアには
6 が出力されます!これは、コマンドが式 (+ 3 3) を評価するためです。
次に、数値の直後にカーソルを置きます。C-x C-e
と入力すると、その数値そのものが得られます。Lispでは、数値を評価すると、その数値そのものが得られます。これが、数値がシンボルと異なる点です。+
のようにシンボルで始まるリストを評価すると、その名前に紐付けられた関数定義内の命令をコンピュータが実行した結果が返されます。シンボル単体を評価した場合は、次の節で見るように、また別のことが起こります。