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


7.2 シンボル生成

これらの関数は、典型的には一時変数として使われる、ユニークなシンボルを 作成する。

Function: gensym &optional x

この関数は、新しい、ユニークな名前を持つinternされていないシンボルを (make-symbolを使って)作る(internされていないシンボルの名前は、 そのシンボルが印字されるときだけ関係がある)。既定では、名前は ‘G1000’、‘G1001’、‘G1002’のように、増加する数列から 生成される。付加引数xが文字列の場合、その文字列は‘G’の 代わりに接頭辞として使われる。internされていないシンボルは、それらの 名前がユーザコード中の“本当の”変数と衝突しないことを 確実にするために、マクロ展開中に一時変数として使われる。

Variable: *gensym-counter*

この変数は、gensym名を生成するために使われるカウンターを 保持する。各gensymの使用後に1つ増やされる。Common Lisp ではこれは0に初期化されるが、このパッケージは、そのコンパイル 中にそれぞれgensymを使う2つのファイルが一緒にロードされたときに トラブルを避けるため、ランダムな(時刻依存の)値で初期化する(intern されていないシンボルは、コンパイラがそれらをファイルへ書き出してEmacs ローダがロードするときにinternされるので、その名前は、intern されていないシンボルはロード後もinternされないままであるCommon Lisp よりも少しだけ、より注意深く扱われなければならない)。

Function: gentemp &optional x

この関数はgensymに似ているが、新しいinternされた シンボルを生成する点が異なる。生成されたシンボルがすでに存在する場合、 この関数はカウンタを1つずつ増やして、新たなシンボルが生成されるまで 再試行し続ける。

Quirozのcl.elパッケージも、自己引用キーワードシンボル作成用に defkeywordフォームを定義した。このパッケージは、&key 引数指定子によって呼び出されるすべてのキーワードを自動的に作り、 キーワード引数に無関係なデータとしてのキーワードの使用に反対するので、 defkeywordフォームは中止した。