我想知道是否存在可以繪製Prolog程序的逐步搜索樹的工具?謝謝。有沒有可以繪製Prolog查詢的搜索樹的程序?
回答
如果你的Prolog系統有一個可定製的調試器,你可以很容易地編寫你自己的運行時圖形採集代碼 。假設你的 Prolog系統有一個回調掛鉤goal_tracing/2,如Jekejeke Prolog。然後我們可以繼續檢查當前幀和父幀以在圖形中創建鏈接。下面是代碼:
goal_tracing(call, F) :-
frame_property(F, sys_call_indicator(N, A)),
frame_property(F, sys_parent_frame(G)),
frame_property(G, sys_call_indicator(M, B)),
!,
update_link(N/A, M/B).
goal_tracing(_, _).
:- dynamic link/2.
update_link(A, B) :-
link(A, B),
!.
update_link(A, B) :-
assertz(link(A, B)).
可以看出我們只檢查電話端口,我們只看看 謂詞指標。但其他方法也可能收集更多數據。現在我們需要一些實用工具來顯示結果。只有 復位收集之前調用,並且展示給 集合後調用:
reset :-
retract(link(_, _)), fail.
reset.
show :-
write('http://yuml.me/diagram/scruffy/class/'),
link(A, B),
write(([B] -> [A])),
write(', '),
fail.
show.
我們生產由yuml.me理解的鏈接。 讓我們試試peano因子程序。程序代碼看起來 如下:
add(n, X, X).
add(s(X), Y, Z) :-
add(X, s(Y), Z).
mul(n, _, n).
mul(s(X), Y, Z) :-
mul(X, Y, H),
add(Y, H, Z).
fac(n, s(n)).
fac(s(X), Y) :-
fac(X, H),
mul(s(X), H, Y).
我們可以按以下方式運行收集器:
?- reset.
?- trace.
?- fac(s(s(n)),X).
X = s(s(n))
?- nodebug.
?- show.
http://yuml.me/diagram/scruffy/class/[fac/2] -> [fac/2], [fac/2] -> [mul/3], [mul/3] -> [mul/3], [mul/3] -> [add/3], [add/3] -> [add/3], Yes
人們可以那麼URL粘貼到瀏覽器中,將看到圖。刪除URL末尾的「,是」 。下面是結果:
問候
序言搜索樹通常太大而無法逐步檢查,但繪製一個可能相當簡單,也很有趣。也許我會嘗試使用html_write庫編寫一個。那樣的話,我會報告結果。
與此同時,SWI-Prolog在其調試器中有一個相當奇特的表示。有關Prolog程序樹的有趣的細節。這不是那麼容易使用,我必須承認我還沒有閱讀文檔。但是我經常使用調試器。您可以瀏覽樹和各個節點上的實例化變量。那是強大的。
可視化Prolog搜索空間是一個非常有趣的任務,並不簡單!
編輯我忘了提及XPCE有能力顯示大型樹木。如果你已經有證明樹,顯示它應該很容易。只需打開查看器。在XPCE手動幫助中應該有一些例子。你可以基於這個顯示。
@Robert Oschler:非常感謝糾正我的糟糕表現後。這很有意思,儘管我擔心,我會繼續表現得很差。但我很欣賞。 – CapelliC 2012-02-26 13:44:04
我的榮幸,特別是因爲所包含的信息很重要。另外,來自一位Prolog粉絲的粉絲你好! – 2012-02-26 14:53:56
- 1. 具有固定查詢的Prolog程序
- 2. Prolog查詢無限搜索
- 3. 搜索查詢沒有出現在URL中的簡單搜索應用程序
- 4. 通過Prolog中的二進制搜索樹進行的範圍查詢
- 5. 搜索有序的LINQ查詢結果
- 6. 有效的搜索查詢
- 7. 沒有遞歸的α-β樹搜索
- 8. 二進制搜索沒有複製的樹刪除
- 9. 可以在Windows安裝程序沒有彈性搜索8.1
- 10. 帶有多個可選搜索參數的sql搜索查詢
- 11. Elastic搜索:沒有查詢註冊[或]
- 12. 搜索查詢返回沒有
- 13. 二叉搜索樹查詢
- 14. 有條件的查詢,其中沒有要搜索的文本
- 15. PhraseQuery:可以從Lucene的查詢(不能精確搜索),如果沒有找到
- 16. 二進制搜索樹實現沒有給出正確的值
- 17. Java二進制搜索樹沒有子項的刪除節點
- 18. 有沒有在LDAP查詢中按長度搜索的方法?
- 19. 繪製深度優先搜索樹
- 20. 二叉搜索樹:沒有輸出
- 21. 試圖定製一個查詢搜索功能沒有vba
- 22. SDL可調整大小的程序沒有正確繪製OpenGL
- 23. 有沒有什麼辦法可以讓二叉搜索樹有簡單的ascii可視化?
- 24. 有沒有可以搜索雜貨店產品的API?
- 25. 爲什麼沒有搜索引擎可以搜索〜符號?
- 26. 可能的具有以下節點的二叉搜索樹和二叉樹
- 27. 二進制搜索樹內的二進制搜索樹
- 28. 查詢有關'like'的搜索結果
- 29. 搜索所有字段的MYSQL查詢?
- 30. 有沒有更有效的查詢,我可以使用
你真了不起。我沒有話語。 – 2012-02-27 15:24:23
也許是我閱讀過的最好的答案之一。謝謝@ j4n bur53。 – Will 2015-12-29 15:12:18
其有點過時了,frame_property/2目標需要升級。 – 2015-12-29 15:40:27