(rontolisp) docs
← 関数

gensym

(gensym [prefix])

#:<prefix><n> という名前の新しいシンボルを返します。prefix のデフォルトは g で、n は 1 から始まるプログラム全体で共有されるカウンタです。rontolisp にはインターンされないシンボルはありません: 結果は通常のシンボルであり、その一意性は(ユーザーが書く名前には通常含まれない)#: プレフィックスと単調増加するカウンタによって保たれます。主な用途は defmacro 本体の中で変数捕捉のない一時変数を生成することで、従来の __ プレフィックスの命名規約を置き換えます。

Common Lisp からの相違点: コンパイルパス(JVM/WASM)では、シンボルのテキストをコンパイル時に確定させるため、プレフィックスはリテラル文字列でなければなりません — 計算されたプレフィックスはコンパイルエラーになります(インタプリタは任意の文字列を受け付けます)。*gensym-counter* 変数はなく、生成されたシンボルも他のシンボル同様にインターンされるため、同じ印字名を 2 回 read すると eq なシンボルになります。

gensym で生成したマクロの一時変数は、呼び出し側の変数と衝突しません: