特殊形式とは、引数がすべて評価されないように特別にマークされたプリミティブのことです。ほとんどの特殊形式は、制御構造を定義したり変数の束縛を行ったりしますが、これらは関数では行えないことです。
各特殊形式には、どの引数が評価され、どの引数が評価されずに使用されるかに関する独自の規則があります。特定の引数が評価されるかどうかは、他の引数の評価結果に依存する場合があります。
式の最初の記号が特殊形式のものである場合、その式はその特殊形式の規則に従う必要があります。そうでない場合、Emacsの動作は明確に定義されていません(ただし、クラッシュすることはありません)。例えば、((lambda (x) x . 3) 4) には lambda で始まるものの、正しく構成された lambda
式ではない部分式が含まれているため、Emacs はエラーを通知したり、3 や 4 あるいは nil
を返したり、あるいはその他の動作をしたりする可能性があります。
この述語は、引数が特殊形式であるかどうかを判定し、特殊形式であれば t を、そうでなければ
nil を返します。
以下に、Emacs Lispのすべての特殊フォームをアルファベット順に列挙し、それぞれの解説箇所への参照を記載します。
and条件を組み合わせるための構文を参照してください。
catchcond条件式を参照
condition-caseエラー処理を行うコードの書き方を参照してください。
defconstグローバル変数の定義を参照
defvarグローバル変数の定義を参照
function無名関数を参照
if条件式を参照
interactiveインタラクティブコールを参照
lambdaラムダ式を参照
letlet*ローカル変数を参照
or条件を組み合わせるための構文を参照してください。
prog1prog2prognシーケンシングを参照
quote引用を参照
save-current-bufferカレントバッファを参照
save-excursionエクスカーションを参照
save-restriction狭窄を参照
setq変数の値の設定を参照
setq-defaultunwind-protect非局所脱出を参照
while反復を参照
Common Lispに関する注記: 以下に、GNU Emacs LispとCommon Lispにおける特殊フォームの比較を示します。
setq、if、およびcatchは、Emacs LispとCommon Lispの両方で特殊フォームです。save-excursionはEmacs Lispでは特殊フォームですが、Common Lispには存在しません。throwはCommon Lispでは特殊フォーム(複数の値を返せる必要があるため)ですが、Emacs Lispでは関数です(Emacs Lispには複数の値がないため)。