如何以关键方式有效地处理每个键具有多个值的键值字典

时间:2017-12-05 05:33:50

标签: prolog swi-prolog clp

我现在正在尝试使用sw-prolog中的assoc库来创建关系序列程序。我需要一个可以存储多个值的字典。使用列表作为值可以轻松完成此操作。

但是,我经常需要查看所有键,单个值 - 即识别包含一个特定值项的所有键。 (但是,值的数量通常限于最多几十个项目。)

如果,我只使用从键映射到多个值的关联存储,那么我需要遍历所有键,获取值,然后检查值是否是其成员。

这样效率不高,看起来也没有大量按键可扩展。

有更有效的方法吗?

我可以为每个价值物品管理自己的"反向"键值存储,但这似乎效率很低。此外,如果我使用prolog事实存储(使用断言/和收回),将每个键值对存储为一个单独的事实,我可能会得到这些查找"索引"免费。

这里的关系方法的正确设计选择是什么?

[edit-1]:btw,one"解决方案"可以允许在关联库中有多个键,以防值在内部"索引" - 但是,关联库并不支持这个(据我所知)。

[edit-2]:看看swi-prolog中的其他库,我注意到未加权的图表。也许使用图形结构对于处理键和值之间的这种多对多关系会更有效。并且,与关系方法保持一致。

[edit-3]:或者,ugraph,不是一个好主意,因为节点(和链接)没有输入。我需要在结构上指出哪个节点是键,哪些是值。

谢谢,

丹尼尔

0 个答案:

没有答案