定義とは、シンボルを特定の方法で使用したいという意図を示す、特殊な種類のLisp式です。通常、特定の用途におけるシンボルの値や意味を指定するとともに、その用途で使用した際の意味に関するドキュメントを添えます。したがって、シンボルを変数として定義する際には、その変数の初期値とドキュメントを併せて提供することができます。
defvar と defconst
は、シンボルをグローバル変数—Lispプログラム内の任意の箇所からアクセス可能な変数—として定義する特殊な形式です。変数の詳細については、変数を参照してください。カスタマイズ可能な変数を定義するには、defcustom マクロを使用します。このマクロは defvar をサブルーチンとしても呼び出します(カスタマイズ設定を参照してください)。
原則として、setq
を使えば、あらかじめ変数として定義されているかどうかにかかわらず、任意のシンボルに変数値を代入できます。ただし、使用したいグローバル変数ごとに変数定義を記述すべきです。そうしないと、レキシカルスコープを有効にして評価した場合に、Lispプログラムが正しく動作しない可能性があります(変数束縛のスコープ規則を参照してください)。
defun
はシンボルを関数として定義し、ラムダ式を生成してそれをシンボルの関数セルに格納します。これにより、このラムダ式がシンボルの関数定義となります。(関数セルの内容を意味する「関数定義」という用語は、defun がシンボルに関数としての定義を与えるという考えに由来しています。)defsubst と defalias
は、関数を定義する他の2つの方法です。関数 を参照してください。
defmacro
は、シンボルをマクロとして定義します。これによりマクロオブジェクトが生成され、シンボルの関数セルに格納されます。なお、あるシンボルはマクロまたは関数のいずれか一方になり得ますが、両方を兼ねることはできません。これは、マクロと関数の両方の定義が関数セルに保持され、そのセルには一度に1つのLispオブジェクトしか格納できないためです。マクロを参照してください。
前述の通り、Emacs Lispでは、同一のシンボルを変数(例:defvar)としても、関数やマクロ(例:defun)としても定義できます。こうした定義同士が衝突することはありません。
これらの定義は、プログラミングツールのガイドとしても機能します。例えば、C-h f や C-h v コマンドは、関連する変数、関数、またはマクロの定義へのリンクを含むヘルプバッファを作成します。The GNU Emacs Manual の Name Help を参照してください。