【发布时间】:2015-03-24 23:50:30
【问题描述】:
我希望能够在我当前的 prolog 程序中尽可能快地查找术语的存在,而不需要 prolog 引擎遍历所有术语直到它最终到达现有术语。
我还没有找到任何证据.. 但我假设给定
animal(lion).
animal(zebra).
...
% thousands of other animals
...
animal(tiger).
swi-prolog 引擎将不得不通过数以千计的动物试图与老虎统一,以确认动物(老虎)在我的 prolog 数据库中。
在其他语言中,我相信 HashSet 可以解决这个问题,启用 O(1) 查找...但是我似乎在 swi-prolog 文档中找不到任何哈希集或哈希表。
是否有用于哈希集的 swi-prolog 库,或者我可以使用 term_hash\2 以某种方式自己构建它吗?
额外信息,我很可能需要查找一些动态添加的数据,要么添加到哈希集数据结构中,要么使用 assertz
【问题讨论】:
-
不过,您可能会介意一些警告。 "animal(tiger)" 在 O(1) 中,但 "animal(X), X=tiger" 在 O(n) 中。
标签: prolog