繁体   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