Prolog 程序查询未终止

问题描述 投票:0回答:1

我是序言新手。我尝试了这个简单的程序。

man(rahul).
person(X) :- man(X).
male(X) :- man(X).
female(X) :- \+ man(x).
female(samita).
married(samita, rahul).
loves(X, Y) :- married(X, Y).
married(X, Y) :- married(Y, X).
child(sita, samita, rahul).
loves(X, Y):- child(X, Y , Z).
loves(X, Z):- child(X, Y , Z).

我的查询是。

loves(sita, X).

据我说。答案一定是。

X = rahul.
X = samita.

但在 swi prolog 中,程序并未终止。 有人可以帮我理解我哪里做错了吗。

代码

man(rahul).
person(X) :- man(X).
male(X) :- man(X).
female(X) :- \+ man(x).
female(samita).
married(samita, rahul).
loves(X, Y) :- married(X, Y).
married(X, Y) :- married(Y, X).
child(sita, samita, rahul).
loves(X, Y):- child(X, Y , Z).
loves(X, Z):- child(X, Y , Z).

查询:

loves(sita, X).
prolog failure-slice
1个回答
0
投票

要了解程序循环的原因,只需查看以下就足够了。 因为这个片段不会终止,你的完整程序也不会终止。

爱(X,Y):-已婚(X,Y),爱(X,Y):- ,孩子(X,Y,Z)爱(X,Z):- ,孩子(X,Y,Z)已婚(萨米塔,拉胡尔):- 。
已婚(X,Y):-已婚(Y,X),。

?- 爱(sita,any),错误。
   循环。
© www.soinside.com 2019 - 2024. All rights reserved.