XSB Prolog中的heaps.P库在哪里?

时间:2012-04-25 23:10:38

标签: data-structures prolog xsb

XSB文档在手册第2卷第1.16.5节中有一个关于堆数据结构库的段落。但是我无法在源代码或版本历史记录中或通过Google找到该库的任何迹象。如果这个库实际存在的任何想法仍然存在?

我唯一的领导是logtalk中的库,它显然来自同一个原始文件。但我正在与Prolog合作,因此必须将logtalk移回Prolog。

2 个答案:

答案 0 :(得分:1)

您可以将XSB中的Logtalk(或任何其他受支持的Prolog编译器)用作另一个库,并从普通Prolog或Prolog模块调用其资源。关于Logtalk的堆库支持,它确实基于原始的Richard O'Keefe代码(如其文档中所述),但增强了以提供最小堆和最大堆。可以浏览堆接口,例如这里:

http://logtalk.org/library/heapp_0.html

http://logtalk.org/library/heap_1.html

一个简单的用法示例:

?- heap(<)::(new(Heap), insert_all([1-a,4-d,2-b,5-e,6-f,3-c,7-g], Heap, UpdatedHeap), top(UpdatedHeap, Key, Value)).
Heap = t(0, [], t),
UpdatedHeap = t(7, [], t(1, a, t(3, c, t(5, e, t, t), t(4, d, t, t)), t(2, b, t(6, f, t, t), t(7, g, t, t)))),
Key = 1,
Value = a.

?- heap(>)::(new(Heap), insert_all([1-a,4-d,2-b,5-e,6-f,3-c,7-g], Heap, UpdatedHeap), top(UpdatedHeap, Key, Value)).
Heap = t(0, [], t),
UpdatedHeap = t(7, [], t(7, g, t(4, d, t(1, a, t, t), t(3, c, t, t)), t(6, f, t(2, b, t, t), t(5, e, t, t)))),
Key = 7,
Value = g.
但是,有一点需要注意。仅当从Logtalk对象(或Logtalk类别)中进行调用时,:: / 2调用才提供与普通Prolog相比的性能。顶级解释器或Prolog模块内的查询被解释(意味着消息在运行时被解析)而不是编译(消息将在编译时解析)。无论性能是否对您的应用程序有意义,您都可以告诉(在支持术语扩展的Prolog编译器中,很容易降低模块内:: / 2调用的性能)。

答案 1 :(得分:0)

Google展示了一些地点:

heaps

heaps