如何解决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 举报,一经查实,本站将立刻删除。