簡體   English   中英

地圖必須包含所有可能的鍵?

[英]Map which must contain all possible keys?

Haskell有多個數據結構,如Map key value ,在內部使用樹或哈希映射。 使用此數據結構時,可能在執行查找時,密鑰將不存在。

在我的用例中,可能鍵的集合是有限的(技術上它們在EnumOrd )並且我只對存在所有鍵的映射感興趣。

如何創建一個類似於地圖的數據結構,保證地圖中存在所有鍵,即它可以具有非部分函數lookup :: Map key value -> key -> value (可能具有key類型的約束, OrdHashable還是其他什么東西)? 有沒有這樣的東西?

換句話說:我想要一個只有在插入所有可能的密鑰時才能查詢的數據結構。 我可以使用帶有fromMaybe常規Map ,但我不想指定默認值 - 我想在類型級別保證永遠不需要默認值。

您正在尋找的結構只是一個功能: Key -> Value 您可以使用以下內容插入 (或實際替換)值

insert :: (Key -> Value) -> Key -> Value -> (Key -> Value)
insert f k v k' = if k == k' then v else f k'

keysvalues函數實現起來很簡單(只需要將Key類型作為Enum )。 編譯器可以警告您函數是否是部分函數(最終,您使用的是哪種數據結構,您無法阻止某人插入undefined值)。

你應該研究一種稱為memo(ization)嘗試的技術 函數類型A -> B的備忘錄是一種數據類型,它表示該類型的函數作為記錄所有參數/結果組合的數據結構。 您可以瀏覽一些鏈接:

但是長話短說,Haskell中的備忘錄試圖以懶惰的方式構建,可能是無限的搜索樹,其中每個鍵的值通過應用我們正在記憶的函數來計算。

備忘錄嘗試可能並不完全符合您的要求,但這種技術很有可能適應您的目標。

暫無
暫無

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

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