为什么Clojure反复认为它应该只有一个参数?

时间:2011-12-11 19:32:03

标签: clojure

编辑:

答案是我正在查看函数,而不是循环参数。

在以下两个函数的第二个中,我无法弄清楚为什么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)))))

1 个答案:

答案 0 :(得分:3)

重要的部分是这里的部​​分:

(loop [mov moves] ...)

此代码片段从外部函数范围绑定movmovesrecur内部使用looprecur根据loop定义只需要一个参数。