У меня очень простая программа на swi-прологе, в которой я определяю все предикаты для семейных отношений. Я также определил некоторые факты (основанные на семье Авраама из Библии).
Поэтому я определил предикат "mother_in_law" следующим образом:
mother_in_law(X,Y):- female(X),mother(X,Z),married(Z,Y).
и некоторые факты:
female(sarah).
mother(sarah,isaac).
married(rebekah,isaac).
Так что теперь, когда я набираю в программе
?- mother_in_law(sarah,X).
это должно дать мне только Х = Ревекка. Но это дает мне некоторые другие значения для X, которые не соответствуют условию, которое я определил.
Может кто-нибудь сказать мне, что я делаю не так?
большое спасибо
Я добавляю всю текстовую часть:
father(X,Y). % Define Predicates%
mother(X,Y).
married(X,Y).
male(X).
female(X).
parent(X,Y).
diff(X,Y).
male_cousin(X,Y).
brother_in_law(X,Y).
mother_in_law(X,Y).
cousin_three(X,Y).
cousin(X,Y).
sib(X,Y).
%Define Facts%
male(terah). male(abram). male(nahor). male(haran). male(isaac).
male(lot). male(moab). male(ben_ami). male(bethuel). male(laban).
male(esau). male(jacob). male(reuben).
female(sarah). female(milcah). female(lot_daughter_1). female(lot_daughter_2).
female(rebekah). female(leah). female(dinah).
father(terah,abram). father(terah,nahor). father(terah,haran).
father(abram,isaac). father(haran,lot). father(nahor,bethuel).
father(bethuel,laban). father(laban,leah). father(isaac,jacob).
father(isaac,esau).
father(jacob,reuben).
mother(sarah,isaac). mother(milcah, bethuel). mother(rebekah,jacob).
mother(rebekah,esau). mother(leah,reuben).
mother(lot_daughter_1,moab). mother(lot_daughter_2,ben_ami).
married(abram,sarah). married(nahor,milcah).
married(isaac,rebekah). married(jacob,leah).
married(sarah,abram). married(milcah,nahor).
married(rebekah,isaac). married(leah,jacob).
%Define complicated predicates%
parent(X,Y) :- father(X,Y).
parent(X,Y) :- mother(X,Y).
diff(X,Y) :- not(X=Y).
sib(X,Y):- parent(Z,X), parent(Z,Y), diff(X,Y). %define sibling %
mother_in_law(X,Y):- female(X),mother(X,Z),married(Z,Y). %question 1%
male_cousin(X,Y):- male(X),father(W,X),parent(Z,Y),sib(W,Z). %question 2%
cousin(X,Y):- parent(Z,X), parent(W,Y), sib(W,Z). %question 3%
cousin_three(X,Y):- parent(Z,X),parent(G,Z),parent(H,Y),parent(K,H),cousin(G,K).
brother_in_law(X,Y):- male(X),married(X,Z),sib(Y,Z). %question 5-X is married to Y's sibling%
brother_in_law(X,Y):- male(X),sib(X,Z),married(Y,Z). %X's sibling is married to Y%
brother_in_law(X,Y):- male(X),married(X,W),married(Y,Z),sib(W,Z). % Y is married to the sibling of X's spouse%