Macros 如何在函数中使用宏?

Macros 如何在函数中使用宏?,macros,clojure,Macros,Clojure,我为clojure创建了一个for循环宏(基于),如下所示: (defmacro for-loop [[sym init check change :as params] & steps] `(loop [~sym ~init value# nil] (if ~check (let [new-value# (do ~@steps)] (recur ~change new-value#)) value#))) 现在,我想在一些函数中使用这

我为clojure创建了一个for循环宏(基于),如下所示:

(defmacro for-loop [[sym init check change :as params] & steps]
 `(loop [~sym ~init value# nil]
    (if ~check
      (let [new-value# (do ~@steps)]
        (recur ~change new-value#))
      value#)))

现在,我想在一些函数中使用这个for循环,但我不知道如何在函数中使用它。有人能给我一点指导吗,或者给我一个在函数中简单使用的例子吗?

如果您通过将
defmacro
更改为
defn
将其转换为函数,那么

(for-loop '[i 0 (< i 10) (inc i)] '(* 2 i))
(用于循环“[i0(
。。。生成(剥离命名空间限定符)

(循环[I0值\uuuu11639\uuuuuu自动\uuuuuuu0]
(如果(

研究一下它的作用

如果你不知道如何使用这个宏,你是怎么写的?在函数中使用它与在其他任何地方使用它大致相同。您是否有任何具体问题,或者您尝试过的方法不起作用?
(loop [i 0 value__11639__auto__ nil]
  (if (< i 10)
    (let [new-value__11640__auto__ (do (* 2 i))]
      (recur (inc i) new-value__11640__auto__))
    value__11639__auto__))