[英]Prolog Out of local stack error
我嘗試了一本書中的一些基本示例,它使“ Out of local stack”錯誤(在代碼后再講)。 這是代碼:
edge(a,b).
edge(a,e).
edge(b,d).
edge(b,c).
edge(c,a).
edge(e,b).
tedge(Node1,Node2) :-
edge(Node1,SomeNode),
edge(SomeNode,Node2).
edge(X,Y) :- tedge(X,Y).
例如,我嘗試編寫查詢edge(a,b)並返回true,然后輸入“;” 它導致了錯誤。 這是什么問題
問題是您已經以循環方式定義了邊。 尋找從a
到b
的第二條路徑時,Prolog遍歷tedge(a,VAR)
, edge(a,VAR)
, tedge(a,VAR)
等。
請注意,即使沒有將邊定義為對稱,Prolog也會循環,即由於循環a- a -> b -> c -> a
。
解決方案是跟蹤先前已訪問過的頂點和/或邊緣。 可以使用closure0 / 3 (我從SO用戶false中學到的謂詞)直接執行檢查非重復頂點的操作。 如果使用該謂詞,則僅需要edge/2
事實和以下查詢:
?- closure0(edge, a, b).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.