% 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
の使用を検討してください。)