Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell DiffList的好处_Haskell - Fatal编程技术网

Haskell DiffList的好处

Haskell DiffList的好处,haskell,Haskell,演示了DiffList概念: *Main Control.Monad.Writer> let f = \xs -> "dog" ++ ("meat" ++ xs) *Main Control.Monad.Writer> f "foo" "dogmeatfoo" DiffList的主要优点是从左到右构造列表吗?数据列表包列出了一些近似值: 你会注意到很多东西只取O(1),包括cons,snoc,和append。但是,请注意,每次检查列表都需要强制执行大量操作,因此,如果您执行的

演示了DiffList概念:

*Main Control.Monad.Writer> let f = \xs -> "dog" ++ ("meat" ++ xs)
*Main Control.Monad.Writer> f "foo"
"dogmeatfoo"

DiffList
的主要优点是从左到右构造列表吗?

数据列表包列出了一些近似值:


你会注意到很多东西只取O(1),包括
cons
snoc
,和
append
。但是,请注意,每次检查列表都需要强制执行大量操作,因此,如果您执行的检查多于构造,或者将两者交错,则
DList
方法不一定是一个胜利。

,因为差异列表在预设值方面更有效,在某些情况下,这可以大大提高性能;对于扩散列表,情况并非如此。然而,对于许多用例,通常有更好的difflist替代方案;有关示例,请参见Data.Sequence。@MarkWhitfield:Data.Sequence的一个大问题是,相对于几乎所有其他常用的数据结构,它具有非常高的常数因子。与
DiffList
相比,它的最大优势在于您可以直接查看它,而
DiffList
必须首先转换为常规列表(“反思而不后悔”一文对此进行了详细介绍)。如果在完全创建列表之前不需要查看/解构列表,
DiffList
的性能将优于
Data.Sequence