我一直在查看示例和文档;我不明白为什么我会得到
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)))))))
Run Code Online (Sandbox Code Playgroud)
表单loop应该看起来就像let表单一样。为了清楚起见,您可以添加逗号空格:
(loop [symbol1 init1, symbol2 init2, ...] body-of-expressions)
Run Code Online (Sandbox Code Playgroud)
看起来你可能想要
(loop [curr-reading reading, ui usage-indicies, curr-idx curr-idx] ...)
Run Code Online (Sandbox Code Playgroud)
其中curr-index被初始化(反弹)为curr-index来自let表达式。
更好的是,您可以将表单中进行的初始化let移至loop表单本身。它看起来也好像usage-vec-len只是countof ,所以当您也可以在循环绑定中处理它时,usage-indices无需在全局中指定它。def
(loop [curr-reading reading
ui [0 0 0 0 0 0 0 0 0 0 0 0 0]
curr-idx (dec (count ui))]
body-of-expressions)
Run Code Online (Sandbox Code Playgroud)