読者です 読者をやめる 読者になる 読者になる

(define -ayalog '())

括弧に魅せられて道を外した名前のないプログラマ

(gensym) はユニークになるのに、 `(symb#) はユニークにならないのは何故?

Clojure stackoverflow

初見だと僕も見事に引っかかった。

(defmacro indirection [name & body]
  `(do
     (def name# ~@body)
     (defn ~name [] name#)))

このマクロは一度しか展開されないので、実行する度にいちいち展開されて name# に違う名前がつくと思うのは間違っているよという話。
まぁこういう書き方がそもそもイケてないので、 let や fn を使ってローカル変数を作ろうよと最後に行き着くわけですね。

(defmacro indirection [name & body]
  `(let [name# ~@body]
     (defn ~name [] name#)))