我嘗試了一本書中的基本示例,它使「超出本地堆棧」錯誤(我會在代碼後告訴更多)。 這裏是代碼:Prolog超出本地堆棧錯誤
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).
我試圖例如寫查詢邊緣(A,B),並且它返回真,然後輸入我「;」它發生了錯誤。 這裏有什麼問題?
簡短的答案是,它進入無限遞歸。如果你做一個「跟蹤」,你會看到發生了什麼。你爲什麼定義了邊(X,Y): - Tedge(X,Y)。它必然會創建一個循環場景,因爲'edge/2'還定義了'tedge/2'引用的事實。只要把它留在'tedge/2'並且查詢'tedge(a,b).'。 – lurker