0
게으른 함수 시퀀스를 강제 평가하는 방법을 궁금합니다.게으른 함수 시퀀스 실행
예를 들어 나는 정수 1 반환하는 함수가있는 경우 :
test.core=> (fn [] 1)
#<core$eval2480$fn__2481 [email protected]>
test.core=> ((fn [] 1))
1
을 그리고 이러한 기능의 게으른 시퀀스 구성 :
test.core=> (repeat 5 (fn [] 1))
(#<core$eval2488$fn__2489 [email protected]> ...)
test.core=> (class (repeat 5 '(fn [] 1)))
clojure.lang.LazySeq
내가 실제로의 기능을 수행 할 어떻게 순서?
test.core=> (take 1 (repeat 5 (fn [] 1)))
(#<core$eval2492$fn__2493 [email protected]>)
test.core=> (take 1 (repeat 5 '(fn [] 1)))
((fn [] 1))
test.core=> ((take 1 (repeat 5 '(fn [] 1))))
ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IFn
나는 DOALL을 제안하는 How to convert lazy sequence to non-lazy in Clojure 통해 읽었습니다 ...하지만 나는 결과가 어디로 가는지 모르겠어요? 나는 [1 1 1 1 1] 또는 비슷한 것을 기대하고있다.
test.core=> (doall (repeat 5 (fn [] 1)))
(#<core$eval2500$fn__2501 [email protected]>...)
test.core=> (realized? (doall (repeat 5 (fn [] 1))))
true
그리고 시퀀스 청킹 (chunking)은 32 청크로 평가 될 것입니다. –
청크 시퀀스를 생성하는 함수 ('repeat'는 생성하지 않습니다)에 대해서만. Chunking은 때로는 중요하지만 OP가 함수 목록을 호출하는 방법을 찾은 후에도 무시해도됩니다. – amalloy