Next: , Previous: , Up: Forms   [Contents][Index]


9.2.7 スペシャルフォーム

スペシャルフォーム(special form)とは、特別だとマークされたプリミティブ関数であり、その引数のすべては評価されません。もっとも特別なフォームは制御構文の定義や変数バインディングの処理等、関数ではできないことを行ないます。

スペシャルフォームはそれぞれ、どの引数を評価して、どの引数を評価しないかについて独自のルールをもちます。特定の引数が評価されるかどうかは、他の引数を評価した結果に依存します。

式の最初のシンボルがスペシャルフォームなら、式はそのスペシャルフォームのルールにしたがう必要があります。それ以外ならEmacsの挙動は(たとえクラッシュしなくいとしても)未定義です。たとえば((lambda (x) x . 3) 4)lambdaで始まるサブ式を含みますが、これは適正なlambda式ではないので、Emacsはエラーをシグナルするかもしれないし、3や4やnilをリターンしたり、もしかしたら他の挙動を示すかもしれません。

Function: special-form-p object

この述語は引数がスペシャルフォームかをテストして、スペシャルフォームならt、それ以外ならnilをリターンする。

以下にEmacs Lispのスペシャルフォームすべてと、それらがどこで説明されているかのリファレンスをアルファベット順でリストします。

and

Combining Conditionsを参照のこと。

catch

Catch and Throwを参照のこと。

cond

Conditionalsを参照のこと。

condition-case

Handling Errorsを参照のこと。

defconst

Defining Variablesを参照のこと。

defvar

Defining Variablesを参照のこと。

function

Anonymous Functionsを参照のこと。

if

Conditionalsを参照のこと。

interactive

Interactive Callを参照のこと。

lambda

Lambda Expressionsを参照のこと。

let
let*

Local Variablesを参照のこと。

or

Combining Conditionsを参照のこと。

prog1
prog2
progn

Sequencingを参照のこと。

quote

Quotingを参照のこと。

save-current-buffer

Current Bufferを参照のこと。

save-excursion

Excursionsを参照のこと。

save-restriction

Narrowingを参照のこと。

setq

Setting Variablesを参照のこと。

setq-default

Creating Buffer-Localを参照のこと。

track-mouse

Mouse Trackingを参照のこと。

unwind-protect

Nonlocal Exitsを参照のこと。

while

Iterationを参照のこと。

Common Lispに関する注意: GNU EmacsとCommon Lispのスペシャルフォームを比較する。setqifcatchはEmacs LispとCommon Lispの両方でスペシャルフォームである。save-excursionはEmacs Lispではスペシャルフォームだが、Common Lispには存在しない。throwはCommon Lispではスペシャルフォーム(なぜなら複数の値をthrowできなければならない)だが、Emacs Lispでは(複数の値をもたない)関数である。