为什么Data.Sequence中缺少takeR,dropR和splitAtR?

时间:2015-06-21 16:40:58

标签: haskell containers sequence

Data.SequencetakeWhileRdropWhileR,可以从右侧有效解构Seq s。但是,takeRdropRsplitAtR显然不存在。 takedrop是根据splitAt实施的。那么,指树不能承认有效splitAtR,还是出于其他原因不包括此功能?

(单独但有些相关的问题:dropR的{​​{1}}实施方式表现得不错吗?)

此问题基于containers-0.5.6.3

1 个答案:

答案 0 :(得分:8)

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),我们可以忽略)。