为什么 Data.Sequence 中缺少 takeR、dropR 和 splitAtR?
Why are takeR, dropR and splitAtR missing from Data.Sequence?
Data.Sequence
有 takeWhileR
和 dropWhileR
用于从右边有效解构 Seq
s。但是,takeR
、dropR
和 splitAtR
明显不存在。 take
和 drop
是根据 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)
,我们可以忽略)。
Data.Sequence
有 takeWhileR
和 dropWhileR
用于从右边有效解构 Seq
s。但是,takeR
、dropR
和 splitAtR
明显不存在。 take
和 drop
是根据 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)
,我们可以忽略)。