[英]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 []
每次我們定義一個新變量( map1
, map2
, map3
)時, Map
的先前版本保持完全不變。 一旦我們定義了(例如) map1
包含鍵"Lemon"
,就沒有任何東西可以改變那個定義。 我們可以創建一個包含其他鍵(或更少鍵)的新映射,但我們無法更改map1
本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.