GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Special-Forms.html ・ emacs-doc.conao3.com

10.2.7 特殊形式

特殊形式とは、引数がすべて評価されないように特別にマークされたプリミティブのことです。ほとんどの特殊形式は、制御構造を定義したり変数の束縛を行ったりしますが、これらは関数では行えないことです。

各特殊形式には、どの引数が評価され、どの引数が評価されずに使用されるかに関する独自の規則があります。特定の引数が評価されるかどうかは、他の引数の評価結果に依存する場合があります。

式の最初の記号が特殊形式のものである場合、その式はその特殊形式の規則に従う必要があります。そうでない場合、Emacsの動作は明確に定義されていません(ただし、クラッシュすることはありません)。例えば、((lambda (x) x . 3) 4) には lambda で始まるものの、正しく構成された lambda 式ではない部分式が含まれているため、Emacs はエラーを通知したり、3 や 4 あるいは nil を返したり、あるいはその他の動作をしたりする可能性があります。

関数: special-form-p object

この述語は、引数が特殊形式であるかどうかを判定し、特殊形式であれば t を、そうでなければ nil を返します。

以下に、Emacs Lispのすべての特殊フォームをアルファベット順に列挙し、それぞれの解説箇所への参照を記載します。

and

条件を組み合わせるための構文を参照してください。

catch

明示的な非ローカル脱出: catch と throw を参照

cond

条件式を参照

condition-case

エラー処理を行うコードの書き方を参照してください。

defconst

グローバル変数の定義を参照

defvar

グローバル変数の定義を参照

function

無名関数を参照

if

条件式を参照

interactive

インタラクティブコールを参照

lambda

ラムダ式を参照

let
let*

ローカル変数を参照

or

条件を組み合わせるための構文を参照してください。

prog1
prog2
progn

シーケンシングを参照

quote

引用を参照

save-current-buffer

カレントバッファを参照

save-excursion

エクスカーションを参照

save-restriction

狭窄を参照

setq

変数の値の設定を参照

setq-default

バッファローカルバインディングの作成と削除を参照

unwind-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には複数の値がないため)。