Next: , Up: Lisp Interpreter   [Contents][Index]


Complications

では1つ目の詳細です。Lispインタープリターはリストの他にも、クォートされておらずカッコにも括られていないシンボルを評価することができます。Lispインタープリターそのシンボルを変数(variable)として値の決定を試みます。この状況については変数のセクションで説明しましょう(Variablesを参照)。

一部の関数は特殊な関数であり、通常のような方法では機能しないというのが2つ目の詳細の原因です。これらの通常のように機能しない関数はスペシャルフォーム(special form)と呼ばれます。これらは関数の定義のように特別な処理のために使用されるもので、数はそれほど多くありません。次のいくつかのチャプターでは、より重要なスペシャルフォームをいくつか紹介するつもりです。

スペシャルフォームと並び、マクロ(macro)もあります。マクロとはLispで定義された構文のことで、元のLisp式が評価される場所において別の式に変換されるようなLisp式であるという点が異なります(Lisp macroを参照)。

この入門書の目的に際しては何かがスペシャルフォームなのか、マクロなのか、それとも通常の関数なのかを過度に気に病む必要はありません。たとえばif (ifを参照)はスペシャルフォームですが、whenはマクロです(Lisp macroを参照)。defunは古いバージョンのEmacsではスペシャルフォームですが、現在ではマクロです(defunを参照)。これは今までと同じように機能します。

Lispインタープリターが注目している関数がスペシャルフォームではなく、リストの一部でもない場合には、Lispインタープリターそのリストの内側にリストがあるかどうかを調べるというのが最後の詳細です。もし内側のリストが存在する場合には、Lispインタープリターはまず内側のリストに何を行うかを解決して、その後に外側のリストを処理します。その内側のリストに別のリストが埋め込まれていたら、まずそれを処理するといったように処理していきます。Lispインタープリターは常にもっとも内側のリストを最初に作用します。インタープリターはそのリストの結果を評価するために、最初にもっとも内側のリストに作用するのです。内側のリストの結果は、それを囲う式によって使用されるかもしれません。

内側にリストがなければ、インタープリターは左から右へと式を1つずつ順に処理します。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.