0

我的问题类似于这里提出的问题:确定旧的继承序言和这个序言- 递归家族树 正如解决方案所述,我真的不想要,任何人都可以就如何解决以下问题提出想法?谢谢!

事实:

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 ;
4

0 回答 0