编辑:
答案是我正在查看函数,而不是循环参数。
在以下两个函数的第二个中,我无法弄清楚为什么recur认为它只是应该传递一个参数。
CompilerException java.lang.IllegalArgumentException:重复的参数计数不匹配,预期:1 args,got:2,编译:(/ home / cnorton / projects / clojure / clj_in_action / mr1 / src / mr1.clj:84)< / p>
我没有看到什么是不正确的。
(defn determine-rover-move
[rover-coord mov]
(println rover-coord mov)
(cond
(= \L mov) (assoc rover-coord 0 (adj-compass-posL (first rover-coord)))
(= \R mov) (assoc rover-coord 0 (adj-compass-posR (first rover-coord)))
(= \M mov) (mov-rover rover-coord)
))
(defn execute-each-move
[moves rover-coord]
(loop [mov moves]
(if (nil? mov)
rover-coord
(recur (rest moves) (determine-rover-move rover-coord mov)))))
答案 0 :(得分:3)
重要的部分是这里的部分:
(loop [mov moves] ...)
此代码片段从外部函数范围绑定mov
到moves
。 recur
内部使用loop
,recur
根据loop
定义只需要一个参数。