2016-02-29 54 views
0

我試圖寫在Clojure的簡單的階乘函數,但我得到這個錯誤:的Clojure java.lang.Long中不能轉換到clojure.lang.IFn錯誤

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

重新打開這個問題:重複的問題是關於一個完全不同的問題,在一個不同的錯誤實現的斐波納契函數。 – amalloy

回答

4

你有一組額外的括號中的遞歸調用的階乘,可能是因爲你的意思是遞減N,它應該是

(defn factorial [n] 
    (if (= n 1) 
     1 
     (* (factorial (dec n)) n) ;; <== 
    ) 
) 
-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)

+0

它是Common Lisp片段,CL中的'1-'是Clojure中的'dec'。 – mobiuseng

相關問題