我需要一个谓词来找到妹妹
sister(X, Y)
- “如果他们有共同的父母 X
,Y's
就是 W
姐妹,X
是女性,而 X
不是 Y
”。
问题是每个“孩子”都有两个父母。因此,我在执行时得到了重复项,我该如何消除它们?
parent(tetiana, olha).
parent(tetiana, bohdan).
parent(mykola, olha).
parent(mykola, bohdan).
parent(maria, alex).
parent(maria, daria).
parent(mykhailo, alex).
parent(mykhailo, daria).
parent(olha, aristarh).
parent(alex, aristarh).
woman(tetiana).
woman(maria).
woman(olha).
woman(daria).
man(mykola).
man(bohdan).
man(mykhailo).
man(aristarh).
man(alex).
sister(X, Y) :-
parent(W, X),
parent(W, Y),
woman(X),
X \== Y.
?-
sister(X, Y).
X = olha,
Y = bohdan
X = olha,
Y = bohdan
X = daria,
Y = alex
X = daria,
Y = alex
我希望看到它:
?-
sister(X, Y).
X = olha,
Y = bohdan
X = daria,
Y = alex
setof/3
删除重复项:
sister(X, Y) :-
setof(X-Y, sister_(X,Y), Sisters),
member(X-Y, Sisters).
sister_(X, Y) :-
parent(W, X),
parent(W, Y),
woman(X),
X \== Y.
样品运行:
?- sister(X, Y).
X = daria,
Y = alex ;
X = olha,
Y = bohdan.
?- sister(X, alex).
X = daria.