Prolog递归方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prolog递归方法相关的知识,希望对你有一定的参考价值。
所以我正在编写一个包含规则waywest(X,Y)
的数据库。 waywest
沿着一条街道建造2座建筑物,并返回建筑物X
建筑物Y
以西不止一栋建筑物。我有:
waywest(X,Y) :- not(west(X,Y)).
waywest(X,Y) :- not(west(X,Z)) , waywest(Z,Y).
这是一种递归循环使用west(X,Y)
事实的方法,其中建筑X
位于建筑Y
以西。我一直得到这个存在错误,调试也不起作用。
答案
根据swi-prolog中没有的文档,你编程它的方式,你只能用它来反驳事实:
不是(:目标) 如果目标无法证明,则为真。仅保留兼容性。新代码应该使用+ / 1。
此外,我会在Prolog的开头不鼓励使用NOT,因为它不是(原文!)在你开始时想要/期望的。
如果我正确理解你的问题,这也应该做到这一点:
west(a,b).
west(b,c).
west(c,d).
west(d,e).
waywest(X,Z) :-
west(X,Y),
west(Y,Z).
waywest(X,Z) :-
west(X,Y),
waywest(Y,Z).
如果我们现在检查它,我们得到预期:
?- waywest(X,Y).
X = a, Y = c ;
X = b, Y = d ;
X = c, Y = e ;
X = a, Y = d ;
X = a, Y = e ;
X = b, Y = e ;
false.
以上是关于Prolog递归方法的主要内容,如果未能解决你的问题,请参考以下文章