2014-01-21 82 views
1

通过fp-oo书中的练习,我很难用早期练习来添加正方形。这里是我的代码:期待这个clojure代码中的函数是什么?

(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) 

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

谢谢, 詹姆斯

回答

4

这是错误的:

(first (l)) 

这意味着,你在呼唤l由于功能。

你应该使用:

(first l) 

和当然,对于(休息(1))

+0

感谢,消除围绕在通话将L的括号先休息同样的事情做了。 –