在clojure中这个阶乘函数有什么问题

时间:2015-08-20 11:46:57

标签: clojure factorial

我有这个功能:

java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)

我收到错误:(defn fact [x] (loop [n x f 1] (if (= n 1) f (recur (dec n) (* f n)))))

但是来自其他SO问题的这个因子工作正常。为什么呢?

var str = 'Paul m\'a dit : « Bonjour ! »';
var corrected_str = str.replace(/ (!|\:|\?|…|;|»)/g, ' $1', str).replace('« ', '«&nbsp');

2 个答案:

答案 0 :(得分:2)

recurlet recur

当你java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)在这里时,你实际上是在函数定义中重复出现,因为函数定义有一个参数loop

在第二个例子中,他正在使用recur,当你想要{{1}}除了函数之外的其他一些参数时,你应该使用它。

答案 1 :(得分:2)

在你的示例中recur循环到!,它期待1个参数但得到2,

第二个示例recur中的

循环到loop,期待2个参数并获得2个参数