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