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

9.1 シンボルの構成要素

各シンボルには4つの構成要素(または「セル」)があり、それぞれが別のオブジェクトを参照しています:

名前を印刷

シンボルの名前。

値

変数としてのシンボルの現在の値。

Function

シンボルの関数定義。シンボル、キーマップ、またはキーボードマクロを保持することもできます。

プロパティ一覧

シンボルのプロパティ一覧。

プリント名セルには常に文字列が格納されており、変更することはできません。その他の3つのセルには、それぞれ任意のLispオブジェクトを設定できます。

プリント名セルには、シンボルの名前となる文字列が格納されます。シンボルは名前によってテキスト形式で表現されるため、同じ名前を持つシンボルが2つ存在しないようにすることが重要です。Lispリーダーはこの点を保証しており、シンボルを読み込むたびに、新しいシンボルを作成する前に、指定された名前を持つ既存のシンボルがないかを確認します。シンボルの名前を取得するには、関数 symbol-name を使用します(シンボルの作成とインターニングを参照)。ただし、各シンボルには一意のプリント名が1つだけありますが、それでも「ショートハンド」と呼ばれる異なるエイリアス名を介して、同じシンボルを参照することが可能です(ショートハンドを参照)。

値セルには、シンボルの値が変数として保持されており、これはシンボル自体をLisp式として評価した結果得られるものです。値の設定や取得方法の詳細については、ローカルバインディングやスコープ規則といった複雑な点も含め、変数を参照してください。ほとんどのシンボルは任意のLispオブジェクトを値として持つことができますが、特定の特殊なシンボルは変更不可能な値を持ちます。これにはnilやt、および名前が‘:’で始まるすべてのシンボル(これらはキーワードと呼ばれます)が含まれます。不変の変数を参照してください。

関数セルには、シンボルの関数定義が格納されています。多くの場合、実際にはfooの関数セルに格納されている関数を指して「関数foo」と呼びますが、この区別を明確にするのは必要な場合に限られます。通常、関数セルは関数(関数を参照)やマクロ(マクロを参照)を格納するために使用されます。ただし、シンボル(シンボル関数間接参照を参照)、キーボードマクロ(キーボードマクロを参照)、キーマップ(キーマップを参照)、またはオートロードオブジェクト(オートローディングを参照)を格納するために使用することも可能です。シンボルの関数セルの内容を取得するには、関数symbol-functionを使用します(関数セルの内容へのアクセスを参照)。

プロパティリストセルには、通常、正しくフォーマットされたプロパティリストが格納されます。シンボルのプロパティリストを取得するには、関数 symbol-plist を使用してください。シンボルプロパティを参照してください。

値セルはvoidである場合があり、これはそのセルがいかなるオブジェクトも参照していないことを意味します。(これは、シンボルvoidを保持することや、シンボルnilを保持することとは異なります。)voidである値セルを調べると、‘Symbol's value as variable is void’のようなエラーが発生します。

各シンボルに個別の値セルと関数セルがあるため、変数名と関数名が衝突することはありません。例えば、シンボル buffer-file-name には値(現在のバッファで参照されているファイル名)と、関数定義(ファイル名を返すプリミティブ関数)の両方が割り当てられています:

buffer-file-name
     ⇒ "/gnu/elisp/symbols.texi"
(symbol-function 'buffer-file-name)
     ⇒ #<subr buffer-file-name>