【问题标题】:State of the art of cheap lists operations in Haskell?Haskell 中廉价列表操作的最新技术?
【发布时间】:2011-10-30 10:42:59
【问题描述】:

对于像append 这样对列表(不是字符串)的廉价操作,我会使用Data.DList。 让我望而却步的是,Hackage 上的软件包被标记为“实验性”,最后一次更新是在 2009 年。

DList 仍然是 Haskell 中的最佳选择吗?

【问题讨论】:

  • 您期望 O(1) 复杂度的操作是什么?
  • 如果你感兴趣的只是追加,那么我推荐这个功能:append x y = undefined,它非常快。 :) 所以我假设你想在构建列表后做一些事情。一旦你告诉我们那是什么,我们就可以给你建议。
  • @augustss: :) 它是关于构建和转换结构化文本列表的。不是普通的 Data.Text,而是说“粗体“你好”、“段落“冗长的文本”或“部分“标题”“内容...”的列表。
  • @Lenny222 那么如何在每个叶子中构建一个带有文本项的树,然后每个附加生成一个分叉。这给了你恒定的时间追加。您可以稍后在 O(n) 时间内对其进行线性化,即每个附加的摊销 O(1)。

标签: list haskell data-structures


【解决方案1】:

Data.DList 的最后更新时间似乎是 2009 年 6 月 20 日星期六 23:01:49 UTC。 hackage 中很多有用的东西都被标记为实验性的,但我不会担心这一点。 DList 看起来很可靠。它不使用任何 volatile 语言扩展,而且代码实际上非常简单。

所以,我猜,答案是:是的,DList 还是不错的。

【讨论】:

  • 2009:我的错误,不知何故 Google 将我发送到旧版本。我想知道在 GHC -> 7.* 升级期间它是否已经过时了。
  • @Lenny222:我怀疑它已经烂了。差异列表非常简单,并且该软件包似乎没有使用除 CPP 之外的任何 GHC 扩展。不太可能出错。
【解决方案2】:

使用来自Data.Sequence 的序列。它也有 O(1) 的缺点和 snoc,但它是基础的,并且被更多地使用和测试。

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多