这种结构对于实时应用程序是必要的——例如用户界面。(用户不关心单击按钮需要 0.1 秒还是 0.2 秒,但他们确实关心第 100 次单击是否会强制执行出色的惰性计算并需要 10 秒才能继续。)
我正在阅读冈崎的论文纯功能数据结构,他描述了一种有趣的通用方法,用于将具有摊销边界的惰性数据结构转换为每个操作都具有相同的最坏情况边界的结构。这个想法是分配计算,以便在每次更新时强制执行一些未评估的 thunk。
我想知道,在 Haskell 中是否有任何标准集合(Map
、Set
等)的实现?
容器包装说
每个操作的声明成本要么是最坏情况,要么是摊销的,但即使结构是共享的,它仍然有效。
因此不能保证单个操作的最坏情况界限。有严格的变体,例如Data.Map.Strict
,但它们的键和值是严格的:
键和值参数被评估为 WHNF;键和值在存储到映射之前会被评估为 WHNF。
它的结构没有(可能的)严格性。