[英]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.