我有以下代码:
male(prince_charles).
male(prince_andrew).
male(prince_edward).
female(princess_ann).
female(queen_elizabeth).
child_of(prince_charles, queen_elizabeth).
child_of(princess_ann, queen_elizabeth).
child_of(prince_andrew, queen_elizabeth).
child_of(prince_edward, queen_elizabeth).
throne(queen_elizabeth).
older(prince_charles, princess_ann).
older(prince_charles, prince_andrew).
older(prince_charles, prince_edward).
older(prince_andrew, prince_edward).
older(princess_ann, prince_andrew).
older(princess_ann, prince_edward).
successor(X) :-
male(X),
older(X, Y),
not(female(Y)),
child_of(X, A),
child_of(Y, A),
throne(A).
successor(X) :-
female(X),
child_of(X, Y),
throne(Y).
运行
findall(X,successor(X), List).
得到这个结果:List = [prince_charles, prince_charles, prince_andrew, princess_ann].
我很期待
List = [prince_charles, prince_andrew, prince_edward, princess_ann].
我已经尝试重新排序关系和规则,但我似乎无法获得预期的列表。
为什么查尔斯王子出现了两次而爱德华王子没有出现?
我错过了什么?