Previous: , Up: シンボル   [Contents][Index]


9.6 位置つきシンボル

位置つきシンボル(symbol with position)とはbareシンボル(bare symbol: 裸のシンボル)位置(position)と呼ばれる非負のfixnumを合わせたシンボルのことです。位置つきシンボルが多くの場合はbareシンボルと同様に振る舞うとしても、これはシンボルではなくbareシンボルであり位置でもあるようなオブジェクトなのです。位置つきシンボルはシンボルではないので、そのbareシンボルが通常はobarrayにあったとしても(シンボルの作成とinternを参照)、位置つきシンボルのエントリーはありません。

バイトコンパイラーは位置つきシンボルを使用してシンボルそれぞれの出現位置を記録、その位置を警告メッセージやエラーメッセージで使用します。通常はこれらを他の用途に用いるべきではありません。これを行うことによりeqequalのようなEmacsの基本関数で予期せぬ結果が生じるかもしれません。

位置つきシンボルのプリント表現には、プリント表現と読み取り構文で概説したハッシュ表記が使用されます。‘#<symbol foo at 12345>’のようなプリント表現であり、入力構文はありません。プリント操作の前後で変数print-symbols-bareを非nilにバインドすれば、bareシンボルだけをプリントさせることができます。バイトコンパイラーはコンパイル済みLispファイルへ書き込む前にこれを行っています。

フラグ変数symbols-with-pos-enabledが非nilの場合には、位置つきシンボルは通常はそのbareシンボルのように振る舞います。たとえば‘(eq (position-symbol 'foo 12345) 'foo)’はtとなり、equalは位置つきシンボルをそのbareシンボルのように扱うのです。

symbols-with-pos-enablednilの場合には位置つきシンボルはシンボルではなく本来のように振る舞います。たとえば‘(eq (position-symbol 'foo 12345) 'foo)’はnilとなり、equalは位置つきシンボルとそのbareシンボルは異なるものとして扱います。

Emacsではsymbols-with-pos-enabledはほとんどの場合にはnilですが、バイトコンパイラーやネイティブコンパイラーは実行中にこれをtにバインドします。この間はEmacsの実行が少し低速になります。

位置つきシンボルは通常はバイトコンパイラーがリーダー関数read-positioning-symbolsを呼び出すことによって作成されます(入力関数を参照)が、関数position-symbolによって作成することもできます。

Variable: symbols-with-pos-enabled

この変数は位置つきシンボルをプリントするとき以外、およびこのセクションで後述するいずれの関数の引数ではない場合における位置つきシンボルの振る舞いに影響を与える。この変数がnilなら、位置つきシンボルはそのbareシンボルと同じように振る舞い、それ以外の場合にはシンボルではなく本来のように振る舞う。

Variable: print-symbols-bare

nilにバインドされていると、Lispプリンターは位置つきシンボルの位置は無視してbareシンボルだけをプリントする。それ以外の場合にはシンボルではなく位置つきシンボル自体をプリントする。

Function: symbol-with-pos-p object

この関数はobjectが位置つきシンボルならt、それ以外はnilをリターンする。symbolpとは異なり、この関数はsymbols-with-pos-enabledを無視する。

Function: bare-symbol sym

この関数は位置つきシンボルsymのbareシンボル、symがすでにシンボルならそれ自体をリターンする。それ以外のタイプのすべてのオブジェクトにたいしてはエラーをシグナルする。この関数はsymbols-with-pos-enabledを無視する。

Function: symbol-with-pos-pos sympos

この関数は位置つきシンボルsymposの位置(非負のfixnum)をリターンする。それ以外のタイプのオブジェクトの場合にはエラーをシグナルする。この関数はsymbols-with-pos-enabledを無視する。

Function: position-symbol sym pos

新たな位置つきシンボルを作成する。新たなオブジェクトのbareシンボルはsymから取得される。symはシンボル、あるいは位置つきシンボルを指定でき、位置つきシンボルの場合にはそのbareシンボルが使用される。新たなオブジェクトの位置はposから取得される。posは非負のfixnum、あるいは位置つきシンボルを指定でき、位置つきシンボルの場合にはその位置が使用される。いずれに無効な引数が指定された場合には、Emacsはエラーをシグナルする。この関数はsymbols-with-pos-enabledを無視する。

This page has generated for branch:emacs-30, commit:ab5505a8acf795c0a0a2745dd6fb666954c6a4bb to check Japanese translation.