位置つきシンボル(symbol with position)とはbareシンボル(bare symbol: 裸のシンボル)と位置(position)と呼ばれる符号なし整数を合わせたシンボルのことです。これらのオブジェクトはバイトコンパイラーによって使用されます。バイトコンパイラーはシンボルそれぞれの出現位置を記録して、警告メッセージやエラーメッセージでそれらの位置を使用します。
位置つきシンボルのプリント表現には、プリント表現と読み取り構文で概説したハッシュ表記が使用されます。‘#<symbol foo at
12345>’のようなプリント表現であり、入力構文はありません。プリント操作の前後で変数print-symbols-bareを非nilにバインドすれば、bareシンボルだけをプリントさせることができます。バイトコンパイラーはコンパイル済みLispファイルへ書き込む前にこれを行っています。
フラグ変数symbols-with-pos-enabledが非nilであっても、ほとんどの用途にたいして位置つきシンボルはbareシンボルと同じように動作します。たとえばこの変数がセットされている場合には、‘(eq
#<symbol foo at 12345>
foo)’の値はtになります(ただしセットされていなければnil)。Emacsではほとんどの場合この変数はnilですが、バイトコンパイラーの実行時にはtにバインドされます。
位置つきシンボルは通常はバイトコンパイラーがリーダー関数read-positioning-symbolsを呼び出すことによって作成されます(入力関数を参照)が、関数position-symbolによって作成することもできます。
この変数が非nilの際には、位置つきシンボルはそれに内包されているbareシンボルと同様に振る舞う。この場合にはEmacsの実行が少しだけ遅くなる。
非nilにバインドされていると、Lispプリンターは位置つきシンボルの位置は無視してbareシンボルだけをプリントする。
この関数はsymbolがシンボルならt、それ以外はnilをリターンする。
この関数はsymbolに含まれるbareシンボル、symbolがすでにbareシンボルならsymbol自体をリターンする。それ以外のタイプのオブジェクトの場合にはエラーをシグナルする。
この関数は位置つきシンボルの位置(数値)をリターンする。それ以外のタイプのオブジェクトの場合にはエラーをシグナルする。
位置つきシンボルを新たに作成する。symはbareシンボルか位置つきシンボルで、これは新たなオブジェクトにたいしてシンボル部分を提供する。posは整数(新オブジェクトの数値部分となる)、あるいは位置つきシンボル(このシンボルの位置を使用)のいずれか。引数のいずれかが無効であればEmacsはエラーをシグナルする。