我无法绕过sequence和LazyList
之间的差异。它们既懒惰又可能无限。 .cc框架中的seq<'T>
是IEnumerable<'T>
,而F# PowerPack中包含LazyList
。实际上,我遇到序列的次数要比LazyList
多得多。
它们在性能,用法,可读性等方面有什么区别?与LazyList
相比,seq
的声誉如此差的原因是什么?
最佳答案
LazyList
仅计算一次每个元素,而不管遍历列表多少次。这样,它更接近Seq.cache
返回的序列(而不是典型的序列)。但是,除了缓存之外,LazyList
的行为与列表完全相同:它在后台使用了列表结构并支持模式匹配。因此,您可能会说:当您需要列表语义和缓存(除了惰性)时,请使用LazyList
代替seq
。
关于两者都是无限的,seq
的内存使用量是恒定的,而LazyList
的则是线性的。
这些docs可能值得一读。
关于data-structures - 序列与LazyList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9201402/