syntax-quote
`form(~ unquote と ~@ unquote-splicing 付き)
フォームをデータとして組み立てます。名前空間から見える var(自身のものか refer された
もの)を指すシンボルはその var の名前空間で限定されるため、展開をどの名前空間で使っても
その var を参照できます。special form は素のままですが、それ以外のシンボルは解決でき
ないものも含めて oracle と同じく限定されます。核の名前は clojure.core/name と綴り
((:refer-clojure ...) で隠された核の名前は自身の名前空間で綴ります)、その他の未解決
の綴りは定義側の名前空間、エイリアス先頭はその名前空間、クラス先頭は完全限定名で綴り
ます。~ はそのフォームの値を埋め込み、~@ は
外側のリスト・ベクター・マップ・セットの中に列を継ぎ足します。各 x# は展開ごとに
1 つの新しい gensym に束縛されます。同じ展開の中では出現箇所によらず同じシンボルに
なり、展開が異なれば別物になります。マクロ本体の外ではテンプレートは書かれた位置で
評価されます。syntax-quote の外の unquote、列の外の splice はエラーです。