Function GENTEMP
gentemp
&optional prefix package => new-symbol
prefix - 文字列。デフォルトは"T"
package - パッケージ指定子。デフォルトは現在のパッケージ。
new-symbol - 新しい、intern
なシンボル
gentemp
は、指定されたpackageに intern
されている新しいシンボルを作成し返却します。 そのシンボルは、これまでpackageで アクセスできなかったものであることが保証されます。 それは、bound
でもfbound
でもなく、 null
のプロパティリストを持ちます。
new-symbolの名前は、prefixと、 gentemp
によってのみ使用される 内部のカウンターからなるサフィックスを、 それぞれ結合して作成します。 (もしその名前のシンボルがpackage内ですでにアクセス可能の場合は、 package内でまだアクセスされてないシンボル名を生成するまで、 カウンターは必要な回数だけインクリメントされます。)
gentemp) => T1298
(gentemp "FOO") => FOO1299
(find-symbol "FOO1300") => NIL, NIL
(gentemp "FOO") => FOO1300
(find-symbol "FOO1300") => FOO1300, :INTERNAL
(intern "FOO1301") => FOO1301, :INTERNAL
(gentemp "FOO") => FOO1302
(gentemp) => T1303 (
内部カウンターは、一回かあるいは複数回インクリメントされます。
内部カウンターの現在の状態と、 packageの現在の状態。
もしprefixが文字列ではないときは、 型type-error
のエラーが発生します。 もしpackageがパッケージ指定子ではないときは、 型type-error
のエラーが発生します。
関数gentemp
は非推奨です。
もしpackageがKEYWORD
パッケージのときは、 その結果はpackageの外部シンボルです。 その他の場合は、packageの内部シンボルです。
gentemp
の内部カウンターは、 gensym
が使用する*gensym-counter*
カウンターとは独立しています。 gentemp
の内部カウンターにアクセスする方法はありません。
gentemp
が以前存在しないシンボルを作成したからといって、 未来にわたってもそのようなシンボルが見えないわけではありません。 (例えばデータファイルでは、違うセッション内の同じプログラムによって、 作成されるかもしれません。) このため、このシンボルは、 gensym
によって生成されたものと同じような意味で、 真にユニークであるということではありません。 特に自動でコード生成を行うようなプログラムでは、 そのように生成されたシンボルに グローバルな属性(例えばspecial
宣言)を付与して ファイルに書き込まないよう注意する必要があります。 なぜならそのようなグローバルの属性は、 違うセッション内においては終わっており、 別の日の、別の目的で自動的に生成された 別のシンボルに適用されているかもしれないからです。