为什么循环语句的绑定向量数量不均匀?

时间:2013-03-04 20:17:58

标签: clojure

我一直在查看示例和文档;而且我无法弄清楚为什么我会得到

loop requires an even number of forms in binding vector错误。

我认为问题出现在循环和初始化使用指标中。我无法弄清楚我做错了什么。

(def usage-vec-len 13)

(defn ret-usage-indicies
"Takes a billed water consumption amount, and returns a vector of the ranges."
[reading]
(let [usage-indicies [0 0 0 0 0 0 0 0 0 0 0 0 0] curr-idx (- usage-vec-len 1)]
 (loop [curr-reading reading ui usage-indicies curr-idx]
.
.
.
 (if (= remaining-reading 0)
 ui
 (recur remaining-reading (assoc ui curr-idx curr-reading) (dec curr-idx)))))))

1 个答案:

答案 0 :(得分:4)

loop表单应该看起来像let表单。为清晰起见,您可以添加逗号空格:

(loop [symbol1 init1, symbol2 init2, ...] body-of-expressions)

看起来你可能想要

(loop [curr-reading reading, ui usage-indicies, curr-idx curr-idx] ...)

其中curr-indexcurr-index表达式初始化(​​反弹)到let

更好的是,您可以将let表单中的初始化向下移动到loop表单本身。它看起来好像usage-vec-len只是count的{​​{1}},所以当你可以在循环绑定中处理它时,无需在全局usage-indices中指定它同样。

def