簡體   English   中英

Haskell不可變數據結構 - Map數據類型

[英]Haskell Immutable data structure - the Map data type

我對Haskell - Map中的這種數據類型感到困惑。 特別是,有一個函數調用插入(來自Data.Map模塊),它允許您將新值附加到Map數據結構。 所以,這是我的困惑。 如果haskell數據結構是不可變的 ,那么如何將新數據插入到現有的Map數據結構中?

insert實際上並沒有修改輸入Map 它返回一個新的 Map ,其中包含與原始Map相同的條目,以及您要插入的Map

但是,在引擎蓋下,編譯器可能實際上不必將所有舊條目復制到新Map ; 如果它確定沒有其他東西正在使用輸入Map ,它可以重用原始。 不變性是語言的一種屬性,不一定是語言的實現

也許一個例子可以使這更清楚。

Prelude> let map1 = empty
Prelude> map1
fromList []

Prelude> let map2 = insert "Lemon" 6 map1
Prelude> map2
fromList [("Lemon", 6)]

Prelude> map1
fromList []

Prelude> let map3 = insert "Lime" 7 map2
Prelude> map3
fromList [("Lime", 7), ("Lemon", 6)]

Prelude> map2
fromList [("Lemon", 6)]

Prelude> map1
fromList []

每次我們定義一個新變量( map1map2map3 )時, Map的先前版本保持完全不變。 一旦我們定義了(例如) map1包含鍵"Lemon" ,就沒有任何東西可以改變那個定義。 我們可以創建一個包含其他鍵(或更少鍵)的新映射,但我們無法更改map1本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM