簡體   English   中英

Prolog超出本地堆棧錯誤

[英]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,然后輸入“;” 它導致了錯誤。 這是什么問題

問題是您已經以循環方式定義了邊。 尋找從ab的第二條路徑時,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM