2012-01-04 1 views
1

헬기, 클로저를 배우려는 시도로 필자는 시퀀스에 작용하는 clojure.core 함수에 관심을 보였다. 최근에 좀 이상한 행동을 발견하고 folling 표현의 차이의 explaination를 싶습니다클로저 저장과 표현식 사용하기

것은 난 할 노력하고있어입니다 :

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

그러나, 나는 def 로모그래퍼 (iterate inc 1)를 저장할 때 오류 얻을 :

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

당신은 a를 호출하는

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

(a) 시도를 일을해야하지만, 기능이 아니다.

+1

아, 예, clojure.lang.cons에 대한 오류 메시지가 clojure.lang.IFn으로 전송됩니다. – wespiserA