我想编写一个宏(my-dotimes [x init end] & body),计算从 init 到 end-1 以 1 为增量的 x 的 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__)