pad*_*pad 16 f# sequence lazy-evaluation data-structures
我无法绕过序列和之间的差异LazyList.他们既懒惰又可能无限.虽然seq<'T>是IEnumerable<'T>从.NET框架,LazyList包括在F#PowerPack中.在实践中,我比LazyLists 经常遇到序列.
它们在性能,使用情况,可读性等方面有何不同?LazyList与此相比,这种不良声誉的原因是seq什么?
Tom*_*cek 19
除了丹尼尔的回答,我认为主要的实际区别在于你如何处理LazyList或seq结构(或计算).
如果你想处理LazyList,你通常会使用模式匹配编写一个递归函数(非常类似于处理普通的F#列表)
如果要处理seq,可以使用内置函数,也可以编写调用的命令式代码,GetEnumerator然后在循环中使用返回的枚举器(可以写为递归函数,但它会改变枚举器).您不能使用通常的头/尾样式(使用Seq.tail和Seq.head),因为这样效率极低 - 因为seq不会保持评估的元素和Seq.head需要的结果从一开始就重新迭代.
有关的声誉seq和LazyList,我认为F#库设计采取务实的态度-因为seq实际上是.NET IEnumerable,它是.NET编程比较方便(它也是很好的,因为你可以把其他收藏品的seq).懒惰列表不是那么频繁且常见的F#列表,seq并且在大多数情况下都足够了.
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |