我有一个应用程序,可以有效地将向量用于代码的一部分。但是,在计算过程中,我需要跟踪一些元素。我听说您可以从 Data.Vectors 获得 O(n) 摊销连接(通过通常的数组增长技巧),但我认为我做得不对。所以假设我们有以下设置:
import Data.Vector((++),Vector)
import Prelude hiding ((++))
import Control.Monad.State.Strict
data App = S (Vector Int)
add :: Vector Int -> State App ()
add v1 = modify (\S v2 -> S (v2 ++ v1))
在这种情况下是否add
在摊销的 O(n) 时间内运行?如果没有,我该怎么add
做(我需要(forall s. MVector s Int)
在州内存储一个吗?)。有没有更有效的实施方式add
?