首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XSB Prolog中heaps.P库在哪里?

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

Stack Overflow用户
提问于 2012-04-26 07:10:38
回答 2查看 89关注 0票数 0

在手册第2卷的第1.16.5节中,XSB文档中有一段关于堆数据结构库的内容。但我找不到这个库的任何迹象,无论是在源代码中,还是在版本历史中,或者通过谷歌。如果这个库还存在,你有什么想法吗?

我唯一的线索是logtalk中的一个库,它显然来自同一个原件。但我使用的是Prolog,所以必须将logtalk重新移植到Prolog。

EN

回答 2

Stack Overflow用户

发布于 2012-04-28 20:43:22

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

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

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

一个简单的用法示例:

代码语言:javascript
复制
?- 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
EN

Stack Overflow用户

发布于 2012-04-26 14:15:18

谷歌显示了几个地点:

heaps

heaps

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10325085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档