これらの関数は、典型的には一時変数として使われる、ユニークなシンボルを 作成する。
この関数は、新しい、ユニークな名前を持つinternされていないシンボルを
(make-symbol
を使って)作る(internされていないシンボルの名前は、
そのシンボルが印字されるときだけ関係がある)。既定では、名前は
‘G1000’、‘G1001’、‘G1002’のように、増加する数列から
生成される。付加引数xが文字列の場合、その文字列は‘G’の
代わりに接頭辞として使われる。internされていないシンボルは、それらの
名前がユーザコード中の“本当の”変数と衝突しないことを
確実にするために、マクロ展開中に一時変数として使われる。
この変数は、gensym
名を生成するために使われるカウンターを
保持する。各gensym
の使用後に1つ増やされる。Common Lisp
ではこれは0に初期化されるが、このパッケージは、そのコンパイル
中にそれぞれgensym
を使う2つのファイルが一緒にロードされたときに
トラブルを避けるため、ランダムな(時刻依存の)値で初期化する(intern
されていないシンボルは、コンパイラがそれらをファイルへ書き出してEmacs
ローダがロードするときにinternされるので、その名前は、intern
されていないシンボルはロード後もinternされないままであるCommon Lisp
よりも少しだけ、より注意深く扱われなければならない)。
この関数はgensym
に似ているが、新しいinternされた
シンボルを生成する点が異なる。生成されたシンボルがすでに存在する場合、
この関数はカウンタを1つずつ増やして、新たなシンボルが生成されるまで
再試行し続ける。
Quirozのcl.elパッケージも、自己引用キーワードシンボル作成用に
defkeyword
フォームを定義した。このパッケージは、&key
引数指定子によって呼び出されるすべてのキーワードを自動的に作り、
キーワード引数に無関係なデータとしてのキーワードの使用に反対するので、
defkeyword
フォームは中止した。