次: Creating Symbols, 前: Symbol Components, 上: Symbols
Lispにおける定義(definition)とは、 特定のシンボルをどのように使うかを意思表示するスペシャルフォームです。 Emacs Lispでは、シンボルを変数と定義したり、 関数(あるいはマクロ)と定義したり、あるいは、それらを独立に定義できます。
定義を行う構文では、典型的には、値を指定したり、 シンボルを特定の使い方をすると指定したりし、 さらに、そのような使い方をしたときの意味を表すための説明文字列を指定します。 したがって、シンボルを変数として定義するときには、 変数に初期値を与え、その変数の説明文字列を指定できます。
defvar
とdefconst
は、シンボルをグローバル変数として定義する
スペシャルフォームです。
これらはDefining Variablesで詳しく説明してあります。
カスタマイズ可能なようにユーザーオプション用の変数を定義するには、
defcustom
(see Customization)を使います。
defun
は、シンボルを関数として定義し、
ラムダ式を作ってシンボルの関数セルに格納します。
したがって、このラムダ式がシンボルの関数定義になります。
(用語『関数定義』は、関数セルの内容を意味し、
defun
がシンボルに関数としての定義を与えることからきている。)
defsubst
とdefalias
は、関数を定義する別の2つの方法です。
See Functions。
defmacro
は、シンボルをマクロとして定義します。
マクロオブジェクトを作ってシンボルの関数セルに格納します。
シンボルは、マクロか関数のいずれかであって、
同時に両方にはならないことに注意してください。
というのは、マクロ定義も関数定義も関数セルに収められ、
そのセルにはどんなときでもたった1つのLispオブジェクトしか
保持できないからです。
See Macros。
Emacs Lispでは、シンボルを変数や関数として使うための
定義は必須ではありません。
したがって、シンボルをあらかじめ定義しようがしまいが、
setq
を使ってシンボルをグローバル変数にできます。
定義の真の目的は、プログラマに対する指針であり、プログラミングツールなのです。
これらは、コードを読むプログラマに対して、
特定のシンボルを変数として使うのか関数として使うのか、
その意図を伝えます。
さらに、etagsやmake-docfileなどのユーティリティは、
定義を認識してタグテーブルやファイルDOC-versionに
適切な情報を追加します。
See Accessing Documentation。