[英]Prolog “Out of local stack” Error
這是我簡單的Prolog程序:
friend(X,Y):-
knows(X,Y).
friend(X,Z):-
friend(X,Y),
friend(Y,Z).
knows(brian,tom).
knows(tom,peter).
如果我鍵入以下查詢
friend(brian,peter).
Prolog將提供以下輸出:
?- friend(brian,peter).
true
如果再輸入一個分號,Prolog會說:
ERROR: Out of local stack
我在這里做錯了什么?
錯誤在第二個子句中。 應該改為:
friend(X,Z):-
knows(X,Y),
friend(Y,Z).
否則,當您向Prolog尋求更多解決方案時,最終您將需要friend/2
謂詞遞歸調用自身,而無需先建立一個knows/2
中間關系。 您可以通過跟蹤對friend/2
謂詞的調用來了解有關程序中錯誤的更多信息。 嘗試:
?- trace, friend(brian,peter).
了解您程序中非終止的來源,只需查看以下失敗切片即可:
friend(X,Y):- false,knows(X,Y). friend(X,Z):- friend(X,Y), false,friend(Y,Z).knows(brian,tom) :- false.knows(tom,peter) :- false.
正是由於friend(X, Z) :- friend(X, Y), ...
,您的程序才會終止。 它會在任何地方產生答案,但最終會循環。 有關更多信息,請參見failure-slice 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.