这是一个应该找出谁与约翰兼容的程序。
我是 Prolog 的新手。为了让 Prolog 知道例如。遇见(X,Y)=遇见(Y,X)
已经写了很多代码。
现在当我开始查询时

?- compatible(john, X)

它进入无限循环......

源代码:
compatible(X,Y) :- reading(X), reading(Y).
compatible(X,Y) :- football(X), football(Y).
compatible(X,Y) :- friends(X,Y).
compatible(X,Y) :- mutual(X,Y).
friends(X,Y) :- havemet(X,Y), compatible(X,Y).
havemet(X,Y) :- met(X,Y).
havemet(X,Y) :- met(Y,X).
mutual(X,Y) :- friends(X,Temp), friends(Y,Temp).
mutual(X,Y) :- friends(Temp,X), friends(Y,Temp).
mutual(X,Y) :- friends(X,Temp), friends(Temp,Y).
mutual(X,Y) :- friends(Temp,X), friends(Temp,Y).

football(john).
football(james).
friends(john, carl).
friends(carl, john).
reading(carl).
reading(fred).
reading(emily).
met(carl, emily).
met(fred, james).
met(fred, emily).

我一直在研究这么多,但我仍然不明白是什么问题以及如何解决这个问题。能帮到我就太好了。

最佳答案

我对你有一个无限循环并不感到惊讶。 compatible 取决于 friendsfriends 取决于 compatible 。你确定这是你想要的吗?

请注意,如果您真的希望规则是递归的,则需要一个停止条件。但我不明白为什么你需要递归来解决像亲和匹配这样的简单问题。

关于序言无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14547932/

10-13 02:57