微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Prolog初学者错误:超出本地堆栈

我对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 =马和A =大象的方式,但是我很难理解为什么它无限递归(我使用了内置跟踪 trace 谓词,但之后却无法理解 A =大象)。

谢谢。

解决方法

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,Z).

为什么?

Y绑定到驴。

Z绑定到马上。

最后一步,您正在寻找bigger(X,horse)

这有意义吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。