2014-01-21 3 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)) 

Это означает, что вы вызываете л как функцию.

Вы должны использовать:

(first l) 

И, конечно, то же самое для (отдыха (л))

+0

спасибо, извлекая эти круглые скобки вокруг л в вызове первой и остальных это сделал. –

Смежные вопросы