2013-01-03 3 views
4

부작용이있는 함수에서 반환 값 컬렉션을 생성하는 방법을 찾고 있으므로 take-while으로 피드를 제공 할 수 있습니다.부작용이있는 함수에서 반환 값 컬렉션을 얻는 방법은 무엇입니까?

(defn function-with-side-effects [n] 
    (if (> n 10) false (do (println n) true))) 

(defn call-function-with-side-effects [] 
    (take-while true? (map function-with-side-effects (iterate inc 0)))) 

(deftest test-function-with-side-effects 
    (call-function-with-side-effects)) 

아무것도 인쇄되지 않습니다 테스트를 실행 :

(defn function-with-side-effects [n] 
    (if (> n 10) false (do (perform-io n) true))) 

(defn call-function-with-side-effects [] 
    (take-while true (? (iterate inc 0) ?))) 

UPDATE 여기

내가 월의 대답 후에 무슨이다. doall을 사용하면 메모리 부족 예외가 발생합니다.

답변

5

map이 문제를 해결하면 안됩니까?

(defn call-function-with-side-effects [] 
    (take-while true? (map function-with-side-effects (iterate inc 0)))) 

모든 부작용을 적용하려면 doall을 사용하십시오. 관련 검색어 : How to convert lazy sequence to non-lazy in Clojure. 나는 이것이 당신이 무엇을 의미하는지이라고 가정 true?과 두 번째 줄에 true을 대체

(defn call-function-with-side-effects [] 
    (doall (take-while true? (map function-with-side-effects (iterate inc 0))))) 

마음입니다.

+0

1 월, 질문의 업데이트 된 부분에 대한 의견을 보내 주시면 감사하겠습니다. 감사! –

+0

Yuriy, 좋은 지적으로, 나는 doall이 어디로 가야하는지 명시 적으로 밝혀야 만한다. 나는 답을 수정했다. 지금 작동합니까? – Jan

+0

알겠습니다. Clojure 놈을 도와 주셔서 감사합니다! –

관련 문제