XSB文檔在手冊卷2第1.16.5節有一個關於堆數據結構庫的段落。但是我無法在源代碼或版本歷史記錄中找到該庫的任何標誌,也無法通過Google找到該庫的任何標誌。任何想法,如果這個庫實際上仍然存在?XSB Prolog中的heaps.P庫在哪裏?
我唯一的領導是logtalk中的一個庫,它顯然是從相同的原始資料中提取的。但是我正在與Prolog合作,因此必須將logtalk移回Prolog。
XSB文檔在手冊卷2第1.16.5節有一個關於堆數據結構庫的段落。但是我無法在源代碼或版本歷史記錄中找到該庫的任何標誌,也無法通過Google找到該庫的任何標誌。任何想法,如果這個庫實際上仍然存在?XSB Prolog中的heaps.P庫在哪裏?
我唯一的領導是logtalk中的一個庫,它顯然是從相同的原始資料中提取的。但是我正在與Prolog合作,因此必須將logtalk移回Prolog。
可以在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.
一個警告,但是。與普通的Prolog相比,::/2調用僅在從Logtalk對象(或Logtalk類別)中創建時才提供性能。頂層解釋器或Prolog模塊中的查詢被解釋(意味着消息在運行時被解析)而不是編譯的(消息在編譯時將被解析)。無論性能指標對於您的應用程序是否有意義,您都可以知道(在Prolog編譯器中支持term-expansion,很容易減少模塊中::/2調用的性能)。