【发布时间】:2014-10-12 06:26:26
【问题描述】:
我想创建一个重复来自另一个集合的元素的惰性序列。它应该在重复之前生成每个元素之一。并且元素的顺序必须是随机的。
它的行为应该是这样的:
=> (take 10 x)
(B A C B A C A B C C)
这似乎有效:
(def x (lazy-seq (concat (lazy-seq (shuffle ['A 'B 'C])) x)))
但是它使用了两个lazy-seq。有没有办法只使用一个lazy-seq 来编写这种惰性序列?
如果用一个lazy-seq 无法做到这一点,如何生成值?由于我的集合只有三个项目,我希望在第一个块中完全计算内部惰性序列。
在提出上述顺序之前,我尝试了以下顺序:
=> (def x (lazy-seq (concat (shuffle ['A 'B 'C]) x)))
=> (take 10 x)
(C A B C A B C A B C)
我将不胜感激任何解释为什么这个不随机化每批。
【问题讨论】: