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


8.2 Defining Symbols

定義(definition)とは、特別な方法で使用を意図することを宣言する、特別な種類のLisp式です。定義とは通常、シンボルにたいする値を指定するか、シンボルにたいする1つの種類の使用についての意味と、この方法で使用するときのシンボルの意味にたいするドキュメントを指定します。したがって、シンボルを変数として定義した場合、その変数の初期値と、加えてその変数のドキュメントを提供できます。

defvarおよびdefconstは、グローバル変数(global variable) — Lispプログラムの任意の箇所からアクセスできる変数 — として定義するスペシャルフォームです。変数についての詳細は、Variablesを参照してください。カスタマイズ可能な変数を定義するには、defcustom(これはサブルーチンとしてdefvarも呼び出します)を使用します(Customizationを参照してください)。

原則として、最初にシンボルが変数として定義されていなくても、setqで任意のシンボルに値を割り当てることができます。しかし、使用したいそれぞれのグローバル変数にたいして、変数定義を記述するべきです。さもないと、レキシカルスコープ(Variable Scopingを参照してください)が有効なときに変数が評価された場合、あなたのLispプログラムは正しく動作しないでしょう。

defunは、ラムダ式(lambda expression)を生成して、そのシンボルの関数セルにそれを格納することにより、シンボルを関数として定義します。したがって、このシンボルの関数定義は、このラムダ式になります(関数セルの内容を意味する用語“関数定義(function definition)”は、defunがシンボルに関数としての定義を与えるというアイデアに由来します)。Functionsを参照してください。

defmacroは、シンボルをマクロとして定義します。これはマクロオブジェクトを作成して、そのシンボルの関数セルにそれを格納します。シンボルにはマクロと関数を与えることができますが、マクロと関数定義はどちらも関数セルに保持されるのにたいし、関数セルに保持できるのは常にただ1つのLispオブジェクトなので、両方1度にそれを行なうことはできないことに注意してください。Macrosを参照してください。

前に注記したように、Emacs Lispではシンボルを(たとえばdefvarで)変数として定義して、同じシンボルを(たとえばdefunで)関数やマクロとして、両方定義することができます。このような定義は衝突しません。

これらの定義は、プログラミングツールのガイドを果たすこともできます。たとえば、C-h fおよびC-h vコマンドは、関係ある変数、関数、マクロ定義へのリンクを含むヘルプバッファーを作成します。Name Help in The GNU Emacs Manualを参照してください。