Function GENTEMP

UP


Function GENTEMP

Function GENTEMP

構文

gentemp &optional prefix package => new-symbol

引数と戻り値

prefix - 文字列。デフォルトは"T"
package - パッケージ指定子。デフォルトは現在のパッケージ。
new-symbol - 新しい、internなシンボル

定義

gentempは、指定されたpackageinternされている新しいシンボルを作成し返却します。 そのシンボルは、これまで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のエラーが発生します。

参考

gensym

備考

関数gentempは非推奨です。

もしpackageKEYWORDパッケージのときは、 その結果はpackageの外部シンボルです。 その他の場合は、packageの内部シンボルです。

gentempの内部カウンターは、 gensymが使用する*gensym-counter*カウンターとは独立しています。 gentempの内部カウンターにアクセスする方法はありません。

gentempが以前存在しないシンボルを作成したからといって、 未来にわたってもそのようなシンボルが見えないわけではありません。 (例えばデータファイルでは、違うセッション内の同じプログラムによって、 作成されるかもしれません。) このため、このシンボルは、 gensymによって生成されたものと同じような意味で、 真にユニークであるということではありません。 特に自動でコード生成を行うようなプログラムでは、 そのように生成されたシンボルに グローバルな属性(例えばspecial宣言)を付与して ファイルに書き込まないよう注意する必要があります。 なぜならそのようなグローバルの属性は、 違うセッション内においては終わっており、 別の日の、別の目的で自動的に生成された 別のシンボルに適用されているかもしれないからです。


TOP, Github