Clojure:在多个(可能无限)序列上迭代
我有两个无限序列。我想在每一步中各走一步。这样做的惯用方式是什么?换句话说,假设有一个有限的、已实现的序列iss,它包含惰性的、无限的序列。如何打印出每个无限序列的第一个元素,然后是每个无限序列的第二个元素,依此类推?可能是这样吗Clojure:在多个(可能无限)序列上迭代,clojure,sequence,infinite,lazy-sequences,Clojure,Sequence,Infinite,Lazy Sequences,我有两个无限序列。我想在每一步中各走一步。这样做的惯用方式是什么?换句话说,假设有一个有限的、已实现的序列iss,它包含惰性的、无限的序列。如何打印出每个无限序列的第一个元素,然后是每个无限序列的第二个元素,依此类推?可能是这样吗 user=> (def seq1 (iterate inc 1)) #'user/seq1 user=> (def seq2 (iterate inc 10)) #'user/seq2 user=> (take 10 (partition 2 (in
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))
也许是这个
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))
我会使用一个简单的地图向量。它将向量的应用程序的惰性序列返回给所有序列的第一个元素,然后返回第二个元素,依此类推。除非你强制实现,否则什么都不会被映射
自己尝试一下注意,范围返回一个无限长的惰性序列:
(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])
我会使用一个简单的地图向量。它将向量的应用程序的惰性序列返回给所有序列的第一个元素,然后返回第二个元素,依此类推。除非你强制实现,否则什么都不会被映射
自己尝试一下注意,范围返回一个无限长的惰性序列:
(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])
看起来不错-我最后编写了一个“flip”函数,它将一个维度为Xinfinity的序列转换为另一个无穷大的序列:defn flip[seq of seqs]cons-map-first-seq-of-seqs-lazy-seq-flip-map-rest-seq-of-seqs-and-interactive-to-that很容易。看起来不错-我已经编写了一个“flip”函数,它将一个维度为Xinfinity的序列转换成另一个无穷大的序列:defn-flip[seq of-seqs]cons映射seqs中的第一个seq lazy seq flip映射seqs中的其余seq-遍历它很容易。