[英]Prolog beginner ERROR: Out of local stack
我对 Prolog 编程很陌生。 任何帮助是极大的赞赏。 我有以下程序,
bigger(elephant, horse).
bigger(horse, donkey).
bigger(donkey, dog).
bigger(donkey, monkey).
is_bigger(X, Y) :- bigger(X, Y).
is_bigger(X, Y) :- is_bigger(Z, Y), bigger(X,Z).
在运行查询时,
?- is_bigger(A, donkey)
我得到以下输出,
A = horse ;
A = elephant ;
ERROR: Out of local stack
虽然我确实有点理解 A = horse 和 A = pixel 的方式,但我很难理解它为什么无限递归(我使用了内置的跟踪跟踪谓词,但在A = pixel之后无法理解它)。
谢谢你。
is_bigger(X, Y) :- is_bigger(Z, Y), bigger(X,Z).
上面一行是导致本地堆栈消息外的那一行。 您再次调用“is_bigger”,再次递归地调用“is_bigger”,依此类推
您的输入: is_bigger(A, donkey)
首先,您要找到比驴大的东西或/和比驴大的东西大的东西。
所以:
is_bigger(X, Y) :- bigger(Z, Y), bigger(X,Z).
为什么?
Y 绑定到驴。
Z 绑定到马。
作为最后一步,您正在寻找bigger(X, horse)
那有意义吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.