繁体   English   中英

Prolog初学者错误:超出本地堆栈

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM