Previous: How the Interpreter Acts, Up: Evaluation [Contents][Index]
別のリストの内側にあるリストに評価を適用する場合には、外側のリストを評価する際に外側のリストは情報として最初の評価によってリターンされた値を使用できます。これが最初に内側の式を評価する理由です。内側の式がリターンされた値は、外側の式によって使用されるのです。
他の例を追加で評価してみて、このプロセスを調べることができます。以下の式の後にカーソルを配置して、C-x C-eをタイプしてください:
(+ 2 (+ 3 3))
エコーエリアに数字の8が表示されるはずです。
これは何が起こったかというと、Lispインタープリターがまず内側の式(+ 3
3)
を評価して値6がリターンされます。その後に外側の式があたかも(+ 2
6)
と記述された式であるかのように評価して値8がリターンされたのです。評価すべき外側の式がこれ以上は存在しないので、インタープリターはこの値をエコーエリアにプリントしました。
今度はキーストロークC-x
C-eによって呼び出されるコマンドの名前を理解するのは簡単でしょう。コマンドの名前はeval-last-sexp
です。sexp
という文字は“symbolic
expression(シンボリック式)”、eval
は“evaluate(評価)”の短縮形です。これは最後(last)のシンボリック式を評価するコマンドなのです。
試しに式のすぐ次の行の先頭、あるいは式の内側にカーソルを置いて式を評価してみてください。
式を以下に再掲しましょう:
(+ 2 (+ 3 3))
式の直後の空行にカーソルを配置してC-x
C-eをタイプすると、エコーエリアには依然として値8がプリントされるはずです。今度は式の内側にカーソルを置いてください。最後から2つ目のカッコの直後(カーソルは最後のカッコ上に表示される)にカーソルを置いた場合には、エコーエリアにプリントされるのは8になります!
これはコマンドが式(+ 3 3)
を評価したからです。
次はカーソルを数字の直後に置いてください。C-x
C-eをタイプすると、その数字自体が得られます。Lispでは、数値を評価するとその数値自体が得られるのです。これが数値とシンボルの違いです。+
のようなシンボルで始めるリストを評価した場合には、コンピューターがそのシンボル名前に関連付けられた関数定義内の命令を実行した結果が値としてリターンされます。シンボル自体が評価された場合には、次セクションで説明するように別の何かが起こることになります。