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


9.2.7 Special Forms

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

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

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

Function: special-form-p object

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

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

and

see Combining Conditions

catch

see Catch and Throw

cond

see Conditionals

condition-case

see Handling Errors

defconst

see Defining Variables

defvar

see Defining Variables

function

see Anonymous Functions

if

see Conditionals

interactive

see Interactive Call

lambda

see Lambda Expressions

let
let*

see Local Variables

or

see Combining Conditions

prog1
prog2
progn

see Sequencing

quote

see Quoting

save-current-buffer

see Current Buffer

save-excursion

see Excursions

save-restriction

see Narrowing

setq

see Setting Variables

setq-default

see Creating Buffer-Local

track-mouse

see Mouse Tracking

unwind-protect

see Nonlocal Exits

while

see Iteration

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