haskell中的immutable array是如何實現隨機訪問的?

時間 2021-06-01 07:24:19

1樓:「已登出」

我印象中 Data.Vector 是乙個 32 個格仔然後可以往下擴充套件的乙個樹,Date.Vector.Mutate 是乙個利用定長陣列實現的 ST Monad

憑印象回答,很可能有錯

2樓:Tang Boyun

已經有答案給出Haskell常用的幾個庫,但如果追求極致效能的話,C陣列依舊是最好的選擇。vector庫中的mutable vector,其實就是包裝好的c陣列。它內部通過黑魔法轉化成immutable vector。

以下source摘自:https://

hackage.haskell.org/pac

kage/vector-0.11.0.0/docs/src/Data-Vector-Storable-Mutable.html#MVector

-- | Mutable 'Storable'-based vectors

data MVector s a = MVector !IntUNPACK #-} !(ForeignPtr aderiving ( Typeable )

instance Storable a => G.Vector Vector a where

basicUnsafeFreeze (MVector n fp) = return $ Vector n fp

黑魔法怎麼用的,可以看Part I: Deamortized ST

摘其中一段名言:

As long as nobody knows that you cheated and nobody can observe that you did, and no matter how many times they try to catch you you get away with it, does it matter that you cheated? I will definitely not be trying this line of reasoning with my wife, but types are more forgiving.

Edward Kmett

如何理解Haskell中的函式呼叫

並不是你想的語法糖,按照你的思路,只返回的函式咋辦?事實是這是一種叫柯里化的東西,用必應會谷歌自行查詢 Currying Function 事實上,對於Haskell 很多地方與一般的面相過程與物件的語言是不一樣的。 UWRF 對於 a b 是函式嗎?a 和 b 是什麼不重要,但 a 和 b 的型別...

Haskell 中如何描述 product 作為 的 category?

張智浩 首先這個問題表述確實不大清楚,至少不是嚴格的數學語言 或者說不大精確 我把問題重新表述如下 此處快速回憶範疇的定義,略 或可參見維基百科 性質 對任意三個物件 復合對映 是同構。不精確的問題 若乙個範疇滿足性質 我們能對它說些什麼嗎?從某些 可能沒用的 經驗來看,這種問題一般就取特殊值就完了...

如何解釋 Haskell 中的單子(Monad)?

陳斌 自函子的Monoidal範疇上的乙個么半群.么半群是指.大概意思.原群 這班裡全是小學生,希望揍他們任意有限次後還是小學生.這在拓撲概念裡可能要求更過分,揍任意無數次必須還是小學生.半群 在原群基礎上,小學生排好隊了之後,我希望先揍任意相鄰兩個,結果都一樣.么半群 在半群基礎上,希望這群小學生...