gensym
古典的なLISPマクロでは単純にS式をS式に置換しているが、この方式でやると置換したものとユーザーの入力の区別が付かずに破滅する 古典LispとSchemeでは違うアプローチをとった。そのうちの一つ、古典Lispの方 名前が被って困るのであれば絶対に被らない名前を使えばいい
通常の手段ではreadできないシンボルを作り、連番を付ける
シンボルは基本ポインタ比較(eq)されるので、名前ごとにシングルトンインスタンスが管理されているが、その管理対象に入れない これをやるとユーザーが同じ名前のシンボルを作ってもgensymされたものとは違う判定になる
ユーザーが任意のシンボルを作れる環境ではこちらでやる