Clojure:迭代多个(可能是无限的)序列

时间:2014-10-02 16:24:56

标签: clojure sequence infinite lazy-sequences

我有几个无限的序列。我想每步走一个。这样做的惯用方法是什么?换句话说,假设有一个有限的,实现的序列iss包含惰性无限序列。如何打印出每个无限序列的第一个元素,然后打印每个无限序列的第二个元素,依此类推?

2 个答案:

答案 0 :(得分:3)

我使用简单的map vector。它将vector的懒惰序列返回到所有序列的第一个元素,然后是第二个元素,依此类推。直到你强制实现,没有任何东西被映射。

自己尝试一下(注意(range)返回一个无限懒惰的seq):

(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])

答案 1 :(得分: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))