Next: Autoloading, Previous: Macro Forms, Up: Forms [Contents][Index]
スペシャルフォーム(special form)とは、特別だとマークされたプリミティブ関数であり、その引数のすべては評価されません。もっとも特別なフォームは制御構文の定義や変数バインディングの処理等、関数ではできないことを行ないます。
スペシャルフォームはそれぞれ、どの引数を評価して、どの引数を評価しないかについて独自のルールをもちます。特定の引数が評価されるかどうかは、他の引数を評価した結果に依存します。
式の最初のシンボルがスペシャルフォームなら、式はそのスペシャルフォームのルールにしたがう必要があります。それ以外ならEmacsの挙動は(たとえクラッシュしなくいとしても)未定義です。たとえば((lambda
(x) x . 3)
4)はlambdaで始まるサブ式を含みますが、これは適正なlambda式ではないので、Emacsはエラーをシグナルするかもしれないし、3や4やnilをリターンしたり、もしかしたら他の挙動を示すかもしれません。
この述語は引数がスペシャルフォームかをテストして、スペシャルフォームならt、それ以外ならnilをリターンする。
以下にEmacs Lispのスペシャルフォームすべてと、それらがどこで説明されているかのリファレンスをアルファベット順でリストします。
andCombining Conditionsを参照のこと。
catchCatch and Throwを参照のこと。
condConditionalsを参照のこと。
condition-caseHandling Errorsを参照のこと。
defconstDefining Variablesを参照のこと。
defvarDefining Variablesを参照のこと。
functionAnonymous Functionsを参照のこと。
ifConditionalsを参照のこと。
interactiveInteractive Callを参照のこと。
lambdaLambda Expressionsを参照のこと。
letlet*Local Variablesを参照のこと。
orCombining Conditionsを参照のこと。
prog1prog2prognSequencingを参照のこと。
quoteQuotingを参照のこと。
save-current-bufferCurrent Bufferを参照のこと。
save-excursionExcursionsを参照のこと。
save-restrictionNarrowingを参照のこと。
setqSetting Variablesを参照のこと。
setq-defaultCreating Buffer-Localを参照のこと。
track-mouseMouse Trackingを参照のこと。
unwind-protectNonlocal Exitsを参照のこと。
whileIterationを参照のこと。
Common Lispに関する注意: GNU EmacsとCommon Lispのスペシャルフォームを比較する。
setq、if、catchはEmacs LispとCommon Lispの両方でスペシャルフォームである。save-excursionはEmacs Lispではスペシャルフォームだが、Common Lispには存在しない。throwはCommon Lispではスペシャルフォーム(なぜなら複数の値をthrowできなければならない)だが、Emacs Lispでは(複数の値をもたない)関数である。