什么期望这个clojure代码中的函数?

时间:2014-01-21 13:33:32

标签: clojure

通过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)

我猜这意味着我试图在某处传递函数而不是预期的列表。有人能告诉我代码的哪一部分是罪魁祸首吗?

谢谢, 詹姆斯

1 个答案:

答案 0 :(得分:4)

这是错误的:

(first (l))

这意味着您将l作为函数调用。

您应该使用:

(first l)

当然,(rest(l))

也是如此