我为clojure创建了一个for循环宏(基于this answer),如下所示:
(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循环,但我无法弄清楚如何在函数中使用它。有人可以指导我,或者给我一个例子,在函数内部简单使用它吗?
答案 0 :(得分:2)
如果您通过将defmacro
更改为defn
将其转换为函数,那么,例如,
(for-loop '[i 0 (< i 10) (inc i)] '(* 2 i))
...生成(剥离命名空间限定符)
(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__))
研究这个以了解它的作用。