ClassCastExpection occuring in Clojure



首先,我对Clojure很陌生。我想知道为什么我在这段代码上得到一个ClassCastExpection。我看过它,在语法和逻辑上它看起来是正确的?

Clojure Code:

; (load-file "cje842asg1.clj")
(def lstnum '(76 85 71))
; 2a
(defn sum [list] (
(if (empty? list) 
0
(+ (first list (sum (rest list))))
)
)
)
; if empty return zero, else add the first num in list and pass in the 
; rest.
(sum lstnum)

任何帮助,不胜感激。

代码有 2 个单独的错误。

第一个是调用(first list (sum (rest list)))当您打算将第二部分作为要+的第二个参数时,它用 2 个参数调用first

导致实际异常的另一个是函数体周围的额外()。请注意((if ...)),这意味着您正在尝试调用if作为函数返回的任何内容。在这种情况下,它返回一个数字,导致class java.lang.Long cannot be cast to class clojure.lang.IFn错误。

更正后的版本将是

(defn sum [list]
(if (empty? list)
0
(+ (first list)
(sum (rest list)))))

在这种情况下,将参数移动到单独的行中可以更轻松地阅读+(恕我直言(。

最新更新