我的问题类似于这里提出的问题:确定旧的继承序言和这个序言- 递归家族树 正如解决方案所述,我真的不想要,任何人都可以就如何解决以下问题提出想法?谢谢!
事实:
male(charles).
male(william).
male(peter).
male(henry).
male(andrew).
male(edward).
female(elizabeth).
female(anne).
female(zara).
female(eugenie).
parent(elizabeth,charles).
parent(elizabeth,anne).
parent(elizabeth,andrew).
parent(elizabeth,edward).
parent(charles,william).
parent(charles,henry).
parent(anne,peter).
parent(anne,zara).
parent(andrew,eugenie).
规则:
son(X,Y) :- parent(Y,X), male(X).
daughter(X,Y) :- parent(Y,X), female(X).
successor(X,Y):- (son(X,Z);daughter(X,Z)) , (Y=Z;successor(Z,Y)).
我在查询后继者(X,Y)时得到的结果。
X = charles,
Y = elizabeth ;
X = andrew,
Y = elizabeth ;
X = edward,
Y = elizabeth ;
X = william,
Y = charles ;
X = william,
Y = elizabeth ;
X = henry,
Y = charles ;
X = henry,
Y = elizabeth ;
X = peter,
Y = anne ;
X = peter,
Y = elizabeth ;
X = anne,
Y = elizabeth ;
X = zara,
Y = anne ;
X = zara,
Y = elizabeth ;
我想展示的实际结果是查尔斯的家人,安德鲁的家人,爱德华的家人,最后是安妮的家人,但安妮的儿子首先出现。我猜这是因为son(X,Y)规则首先执行并找到所有匹配项,并且后继(X,Y)存在问题。结果找到anne后,有没有办法让它执行?谢谢!
实际的答案是这样的
X = charles,
Y = elizabeth;
X = william,
Y = charles;
X = william,
Y = elizabeth ;
X = henry,
Y = charles ;
X = henry,
Y = elizabeth ;
X = andrew,
Y = elizabeth ;
X = eugenie,
Y = andrew ;
X = eugenie,
Y = elizabeth ;
X = edward,
Y = elizabeth ;
X = anne,
Y = elizabeth ;
X = peter,
Y = anne ;
X = peter,
Y = elizabeth ;
X = zara,
Y = anne ;
X = zara,
Y = elizabeth ;