一个(非常)奇怪的故事:我娶了一个寡妇(W),她有一个女儿(D)。我的父亲(F)娶了我的继女(D)。我的妻子生了一个儿子(s1)。我父亲的妻子(继女)也有一个儿子(s2)。
该项目的目标是输入:
grandfather(i,i).
并yes
在序言中返回。
这是我到目前为止所拥有的:
%facts
father(f,i).
husband(i,w).
husband(f,d).
mother(w,d).
mother(w,s1).
father(i,s1).
mother(d,s2).
father(f,s2).
%rules
father(X,Y) :- f_in_law(X,Y).
father(X,Y) :- husband(X,Z),mother(Z,Y).
f_in_law(X,Y) :- husband(Z,Y),father(X,Z).
b_in_law(X,Y) :- husband(Z,Y),brother(X,Z).
%brother(X,Y) :- b_in_law(X,Y).
uncle(X,Y) :- father(Z,Y),brother(X,Z).
grandfather(X,Y) :- father(Z,Y),father(X,Z).
我追踪它,看看出了什么问题。father(f,i)
是真的,那很好!但father(i,f)
被认为是假的。有关如何纠正此问题的任何建议/想法?我很感激任何输入,因为我对 prolog 很陌生。