2014-01-21 65 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的括號先休息同樣的事情做了。 –