首先,我对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)))))
在这种情况下,将参数移动到单独的行中可以更轻松地阅读+
(恕我直言(。