通过fp-oo书中的练习,我在早期练习中遇到麻烦,无法添加方块。这是我的代码:
(defn square [n]
(* n n))
(defn add-squares [l]
(cond
(nil? l) 0
:else (+ (square (first (l))) (add-squares (rest (l))))))
这个例子:
(add-squares '(2 2 2 2))
应该返回
16
但是因为这个例外而失败:
ClassCastException clojure.lang.PersistentList cannot be cast to clojure.lang.IFn user/add-squares (NO_SOURCE_FILE:4)
我猜这意味着我试图在某处传递函数而不是预期的列表。有人能告诉我代码的哪一部分是罪魁祸首吗?
谢谢, 詹姆斯
答案 0 :(得分:4)
这是错误的:
(first (l))
这意味着您将l作为函数调用。
您应该使用:
(first l)
当然,(rest(l))
也是如此