haskell - 为什么 Data.Sequence 中缺少 takeR、dropR 和 splitAtR?

标签 haskell containers sequence

Data.Sequence 具有 takeWhileRdropWhileR,用于从右侧高效解构 Seq。但是,takeRdropRsplitAtR 明显不存在。 takedrop 是根据 splitAt 实现的。那么,手指树是否不承认有效的 splitAtR 或者是否由于其他原因未包含此功能?

(独立但有些相关的问题:就 viewR 而言,一个简单的 dropR 实现会表现得很好吗?)

此问题基于containers-0.5.6.3 .

最佳答案

length是 O(1),因此 splitAt 足以以有效的方式定义您需要的一切。

 splitAtR i s = splitAt (length s - i) s
 takeR i s = snd $ splitAtR i s
 dropR i s = fst $ splitAtR i s

根据文档,splitAt 成本 O(log(min(i,length s-i))),因此通过对称 splitAtR 成本相同(只是一个额外的 +O(1),我们可以忽略)。

关于haskell - 为什么 Data.Sequence 中缺少 takeR、dropR 和 splitAtR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30966910/

相关文章:

haskell - 我如何使用新的 cabal 生成 HTML 代码覆盖率报告?

c++ - C++ 中多种数据类型的通用容器

logging - 将日志从 Docker 容器发送到 ELK 容器(不使用 Filebeat)

c++ - Orderbook 表示的哪个 STL 容器?

c# - 尝试比较两个列表 c# - 应该工作吗?

algorithm - 适用什么样的算法?

haskell - 快速排序的比较次数

haskell - 这个 Haskell 函数的类型签名是什么?

Haskell:如何使用正确的退出代码向用户报告命令行参数的验证错误

swift - 何时使用 forEach(_ :) instead of for in?