我试图在clojure中编写简单的阶乘函数,但我收到了这个错误:
java.lang.Long cannot be cast to clojure.lang.IFn
我知道这个错误通常是由于一个额外的括号,但我不确定这种情况。
首先我在LISP中编写了函数,它可以正常工作。 代码:
(defun factorial (n)
(if (= n 1)
1
(* (factorial (1- n)) n )
)
)
(factorial 5)
然后我在clojure中尝试了它,它不起作用。 Clojure代码:
(defn factorial [n]
(if (= n 1)
1
(* (factorial(n)) n)
)
)
(defn -main
[& args]
(println(factorial 5))
)
答案 0 :(得分:4)
你在对factorial的递归调用中有一组额外的parens,可能是因为你想减少n,它应该是
(defn factorial [n]
(if (= n 1)
1
(* (factorial (dec n)) n) ;; <==
)
)
答案 1 :(得分:-1)
正如MarkNFI所示,递减有自己的运算符inc
。
但要向您展示代码中的问题:
(defun factorial (n)
(if (= n 1)
1
(* (factorial (1- n)) n ) ;; (1- n) must be changed to (dec n) or (- n 1)
)
)
(factorial 5)
(1- n)
不是clojure中的运算符。您必须先放置操作员。因此,在您的情况下,它将是:(- n 1)