4

このコードを投稿しました:

import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Algorithms.Intro as VAlgo

argSort :: (Ord a, VU.Unbox a) => VU.Vector a -> VU.Vector Int
argSort xs = VU.map fst $ VU.create $ do
    xsi <- VU.unsafeThaw $ VU.indexed xs
    VAlgo.sortBy (comparing snd) xsi
    return xsi

のバージョンunsafeThawしか解凍していないので、ここで安全に使用できるというのが私の推論でした。しかし、タプルのボックス化されていないベクトル (ここでのインデックスと値のペアのように) は、実際には 2 つのボックス化されていないベクトル (1 つはインデックス用、もう 1 つは値用) として格納されていることに気付きました。したがって、実際には新しい値ベクトルをまったく生成せず、それをインデックス ベクトルと結合するだけである可能性が高いと思われます。この場合、-modifyingは台無しになる可能性があります。indexedxsindexedSTxsixs

ただし、テストすると、これは発生しないようです。これに頼ることができますか、それともより適切に使用する必要がありますthawか?

4

0 に答える 0