init から end-1 までの x の body の値を 1 ずつ計算するマクロ (my-dotimes [x init end] & body) を書きたいと思います。捕獲問題」。次のように動作するはずです。
user=> (my-dotimes [x 0 4] (print x))
0123nil
私のコードは:
(defmacro my-dotimes [[x initial end] & body]
`(loop [i# ~initial]
(when (< i# ~end)
~@body
(recur (inc i#))))))
しかし、macroexpand を使用してチェックすると、次のことがわかります。
user=> (macroexpand '(my-dotimes [x 0 4] (println x)))
(loop* [i__4548__auto__ 0] (clojure.core/when (clojure.core/<i__4548__auto__ 4)
(println x)
(recur (clojure.core/inc i__4548__auto__))))
どう変えようか迷ってます
(println x) => (clojure.core/println i__4548__auto__)