% Function GENTEMP
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宣言)を付与して
ファイルに書き込まないよう注意する必要があります。
なぜならそのようなグローバルの属性は、
違うセッション内においては終わっており、
別の日の、別の目的で自動的に生成された
別のシンボルに適用されているかもしれないからです。