2014-10-02 3 views
1

두 개의 무한 시퀀스가 ​​있습니다. 나는 한 걸음마다 서로를 하나씩 가져 가고 싶다. 그 일을하는 관용적 인 방법은 무엇입니까? 즉, 유한하고 실현 된 시퀀스 iss에 게으른 무한 시퀀스가 ​​있다고 가정합니다. 모든 무한 시퀀스의 첫 번째 요소를 인쇄 한 다음 모든 무한 시퀀스의 두 번째 요소를 인쇄하는 방법은 무엇입니까?Clojure : 여러 (무한) 시퀀스 반복 가능

답변

3

간단한 map vector을 사용합니다. vector이라는 게으른 응용 프로그램 시퀀스를 모든 시퀀스의 첫 번째 요소에 반환 한 다음 두 번째 요소 등을 반환합니다. 실현을 강요 할 때까지 아무 것도 매핑되지 않습니다.

은 ((range) 무한 게으른 서열을 반환합니다) 자신을 위해보십시오 :

(def lazy-zipped (map vector (range) (drop 10 (range)) (drop 20 (range)))) 

(take 5 lazy-zipped) 

인쇄

([0 10 20] [1 11 21] [2 12 22] [3 13 23] [4 14 24]) 
+0

좋아 보인다 - 나는 '플립'기능을 작성 결국 한 그 (차원 X * 무한대로) 시퀀스를 다른 (무한대 * X)로 변환한다 : '(defn flip [seq-of-seqs]' ' (cons' '(map first seq-of-seqs)' '(lazy-seq (플립 (지도 나머지 seq-of-seqs))))))' 그리고 그것을 통해 iterating 쉽습니다. –

1

어쩌면?

user=> (def seq1 (iterate inc 1)) 
#'user/seq1 
user=> (def seq2 (iterate inc 10)) 
#'user/seq2 
user=> (take 10 (partition 2 (interleave seq1 seq2))) 
((1 10) (2 11) (3 12) (4 13) (5 14) (6 15) (7 16) (8 17) (9 18) (10 19))