% Function GENSYM
Function GENSYM
gensym &optional x => new-symbol
x - 文字列か、非負の整数。
複雑な動作をするので下記をご確認ください。
new-symbol - 新しい、uninternなシンボル
make-symbolが呼ばれたかように、
新しく、uninternなシンボルが作成し返却されます。
(gensymとmake-symbolの唯一の違いは、
どのようにnew-symbolの名前を決めるかです)
new-symbolの名前は、
標準では"G"のプレフィックスと、
標準では*gensym-counter*の値を
10進数の数で表現したサフィックスを、
順に結合したものになります。
もしxが与えられ、それが文字列のときは、
そのgensymが呼ばれたときのみ、
"G"の代わりのプレフィックスとして使われます。
もしxが与えられ、それが整数のときは、
そのgensymが呼ばれたときのみ、
*gensym-counter*の値の代わりとして、
サフィックスの整数値として使われます。
明にサフィックスが与えられなかった場合は、
実行後に*gensym-counter*がインクリメントされます。
(setq sym1 (gensym)) => #:G3142
(symbol-package sym1) => NIL
(setq sym2 (gensym 100)) => #:G100
(setq sym3 (gensym 100)) => #:G100
(eq sym2 sym3) => false
(find-symbol "G100") => NIL, NIL
(gensym "T") => #:T3143
(gensym) => #:G3144
*gensym-counter*はインクリメントされるかもしれません。
もしxが文字列でも、非負の整数でもなければ、
型type-errorのエラーが発せられます。
gensymの引数に数値を渡す機能は非推奨になり、
明示的に*gensym-counter*を束縛するのが
様式上好まれるようになりました。
(オプション引数の多少奇妙な慣習は、本来の歴史的なものであり、
主に古いLispの方言との互換性のためにサポートされています。
現代のコードでは、引数に文字列のプレフィックスのみを
使用することが推奨されています。
しかし、一般的には、
より柔軟にnew-symbolの名前を制御したいのであれば、
代わりにmake-symbolの使用を検討してください。)