簡體   English   中英

Prolog“超出本地堆棧”錯誤

[英]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), ... ,您的程序才會終止。 它會在任何地方產生答案,但最終會循環。 有關更多信息,請參見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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