Haskell DiffList的好处
演示了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。但是,请注意,每次检查列表都需要强制执行大量操作,因此,如果您执行的
*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
。