我知道惰性序列可以被分块处理。也就是说,如果我的程序需要一个惰性序列的n个元素,可能会实现多于n个。
我能否假定如果在同一版本的Clojure中再次运行相同的代码,将会实现完全相同的元素?我本以为是这样,但不希望在没有了解的情况下就假定。
(以下信息提供给可能对此感兴趣的人,但相信了解我的使用场景并非回答此问题的必要条件。所以,请随意跳过此段落。我正在运行一些模拟,这些模拟使用了伪随机数生成器。这包括截断“目标”时被截断的随机行走。预先作为一个惰性序列生成行走是方便的,然后在遇到目标时停止实现其元素。通常,我会丢弃中间结果,例如原始的随机行走。它们在某个时刻存在于数据结构中,但最终不再使用。然而,有时我想要返回并重新运行模拟,以便检查中间结果。存储用于模拟运行的种子很容易,并使用它将随机数生成器设置为相同的开始状态。但是,分块可能导致随机数生成器被调用比实际需要的时间多。这可以,但如果分块根据代码和Clojure版本之外的某些因素变化,那么再次使用相同的种子重新运行模拟就不保证会得到相同的结果。目前这不算什么大问题。我可以在几乎没有性能损失的情况下使中间数据非惰性。然而,我仍在想是否真的需要这么做。)