clojure 中的这个阶乘函数有什么问题
What's wrong with this factorial function in clojure
我有这个功能:
(defn ! [x]
(let [n x product 1]
(if (zero? n)
product
(recur (- n 1) (* product n)))))
我收到错误:java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)
但是来自其他 SO 问题的这个阶乘工作正常。为什么?
(defn fact [x]
(loop [n x f 1]
(if (= n 1)
f
(recur (dec n) (* f n)))))
你不能在 let
上 recur
。
当您在此处 recur
时,您实际上是在函数定义上重复出现,该函数定义有一个参数,因此 java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)
。
在第二个例子中,他使用了 loop
,当你想要 recur
一些其他参数时,你应该使用它,而不是函数。
在你的例子中 recur
循环到 !
期望 1 参数但得到 2,
在第二个例子中 recur
循环到 loop
期望 2 个参数并得到 2 个参数
我有这个功能:
(defn ! [x]
(let [n x product 1]
(if (zero? n)
product
(recur (- n 1) (* product n)))))
我收到错误:java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)
但是来自其他 SO 问题的这个阶乘工作正常。为什么?
(defn fact [x]
(loop [n x f 1]
(if (= n 1)
f
(recur (dec n) (* f n)))))
你不能在 let
上 recur
。
当您在此处 recur
时,您实际上是在函数定义上重复出现,该函数定义有一个参数,因此 java.lang.IllegalArgumentException: Mismatched argument count to recur, expected: 1 args, got: 2 (NO_SOURCE_FILE:33)
。
在第二个例子中,他使用了 loop
,当你想要 recur
一些其他参数时,你应该使用它,而不是函数。
在你的例子中 recur
循环到 !
期望 1 参数但得到 2,
在第二个例子中 recur
循环到 loop
期望 2 个参数并得到 2 个参数