编辑:

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

在以下两个函数中的第二个函数中,我无法弄清楚为什么recur认为它只应该传递一个参数。

CompilerException java.lang.IllegalArgumentException:重复出现不匹配的参数计数,预期值:1 args,得到:2,编译:(/ home / cnorton / projects / clojure / clj_in_action / mr1 / src / mr1.clj:84)

我没有看到不正确的地方。

(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 票数:3 已采纳

重要的部分是此处的部分:

(loop [mov moves] ...)

此代码片段将mov绑定到外部函数范围的moves 尽管recur的使用位于loop内部,所以recur根据loop定义仅期望一个参数。

  ask by octopusgrabbus translate from so

未解决问题?本站智能推荐:

2回复

你能强制一个Clojure宏来评估它的论点吗?

我正在尝试定义一个包装clojure.test/deftest的辅助函数。 这是我的总体想法: 但是,由于deftest的第一个参数deftest ,因此它会抛出异常,因为它是一个表单而不是符号。 有没有办法强制表格先评估?
4回复

clojure实例? 单一论点

我对clojure instance?有点困惑instance? 功能。 采取一个论点似乎很高兴。 所以 工作正常,但总是返回false。 我在这里错过了什么吗? 我在两天内完成了两次,两次都花了很长时间才进行调试(是的,我同意,犯错一次可能被视为不幸,但两次看起来像粗心大
1回复

阶乘迭代非法论点-Clojure

错误:线程“主”中的异常java.lang.IllegalArgumentException:循环需要一个用于绑定的向量。 我正在尝试编写一个评估数字阶乘的函数。 我的错误在哪里? 它给我1作为答案
2回复

Clojure的fn中的“名字?”论点是什么?

我正在阅读Russ Olsen的“获得Clojure”一书。 在第8章“Def,Symbols和Vars”中,有以下函数定义: 我的问题是关于带下划线的second ,它是第二个。 起初,我认为这种语法是错误的,因为匿名函数不需要名称。 但随着它的发展 ,这种语法是正确的。
3回复

Clojure“如果”从未评估其第三个论点

我一直想把这个问题想象一下。 这就是我写的功能。 is-decimal要么传递诸如“2.5”或“5”之类的东西,要么是类似的东西,但它总是使用if的第二个参数,而不是第三个参数。 我在REPL中测试了(. astr (indexOf (int \\.)))并且它似乎工作正常,它在失败
2回复

Clojure的备忘录是否会强制评估其论点?

在Clojure中,如果我记住一个函数,将其命名为f并在参数a上调用它。 如果a是一个很大的延迟值,memoize是否会根据匹配thunk返回一个值,而不是强制评估a和匹配结果? 其中thunk是懒惰序列的未评估部分。 如果不是这种情况,有没有内置的方法来获得这种行为?
2回复

一个论点,很多功能

我有一个来自我正在使用tail-seq读取的文件的传入惰性流行(对于contrib - now!)我想要一个接一个地处理这些行,其中有几个“侦听器函数”根据re-seq采取行动-hits(或其他东西)在行中。 我尝试了以下方法: 它按预期工作。 但是,代码中有很多代码重复和其他错
2回复

一个Clojure绑定问题

只是想重新考虑一些简单的代码 我有一个功能 我知道我可以写 是否有像foo这样的函数的类似解构,我可以在实际的defn中编写[xy :as line]或[xyz :as plane] ? (即飞机将被分配[xyz])
3回复

Clojure被认为是Lispy还是Schemey? [重复]

可能重复: Clojure是否从初学者的角度更接近Scheme或Common Lisp? Clojure是一种在JVM上运行的Lisp方言。 Clojure被认为是Lispy还是Schemey? 我的意思是它像Lisp还是喜欢Scheme?
7回复

Clojure:如何在异常情况下再次发生?

我尝试多次执行func,然后放弃异常。 但是在Clojure中从catch块中重新出现是无效的。 如何实现呢? 我能找到的最好的方法是以下笨拙的解决方案(将函数包装并调用)