2012-01-04 51 views
1

Helo,爲了學習clojure,我對clojure.core函數產生了興趣,這些函數對序列起作用。最近,我注意到一些奇怪的行爲,並希望folling表達之間的差異的交代:clojure存儲與在表達式中使用序列

我試圖做到這一點的是:

user=> (reduce + (take-while (partial > 1000) (iterate inc 1))) 
499500 

然而,當我存儲(iterate inc 1)def一得到一個錯誤:

user=> (def a (iterate inc 1)) 
#'user/a 
user=> (reduce + (take-while (partial > 1000) (a))) 
java.lang.ClassCastException: clojure.lang.Cons cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0) 

可能有人請解釋什麼是存儲iterate inc 1並直接在表達式中使用它的區別?我知道a是一個懶惰的序列,但我缺少一些東西...

非常感謝您的時間。

回答

3

你應該做

(reduce + (take-while (partial > 1000) a)) 

(a)試圖調用a,但它不是一個功能。

+1

ahh是的,這解釋了有關將clojure.lang.cons轉換爲clojure.lang.IFn的錯誤消息。 – wespiserA 2012-01-04 14:54:25