【发布时间】:2011-06-12 17:29:01
【问题描述】:
我有一个嵌套的、相互递归的data structure,并希望将计算昂贵的值与某些节点相关联。实际上,我想暂时将 Pandoc 文档中的块链接到该块中出现的单词列表。
我想避免的没有吸引力的选择:
扩展 Block 数据类型,使其包含单词列表,这归结为创建具有大量(脆弱)样板代码的新扩展 Pandoc 数据类型
将块映射到单词列表;这是次优的,因为块太复杂而无法有效地用作键
我寻求解决方案的方向是某种覆盖数据结构,包括扩展块,但底层数据类型不受影响,因此我仍然可以使用广泛的 Pandoc 库。但也许这不是 Haskell 的思维方式……
2011-06-12 发布脚本:
正如 cmets 所示,我可能高估了 Map 方法的成本,部分原因是错误的假设。确实:“没有什么比显而易见的事实更具欺骗性了”。
无论如何,我接受 hammar 的回答,因为它说明了如何创建可扩展的数据类型。
谢谢
【问题讨论】:
-
你可以使用
Map来存储节点之间的关联吗? -
@Don Stewart:您是指从 Block 到 WordList 的 Data.Map 吗?是的,但我担心的是,作为键的 Block 数据结构过于复杂。通常它代表整个段落及其格式,可能包括其他块。
-
在存储为密钥之前对块进行哈希处理?
-
或者只使用 HashMap(来自无序容器)。
-
在放弃将 Block 作为 key 的想法之前,也许您应该尝试一下。
标签: data-structures haskell pandoc