我目前正在编写一个表示家庭关系的PROLOG程序。
现在我已经实现了以下功能。
male(X). Returns true if X is male.
female(X). Returns true if X is female.
mother_of(X,Y). Returns true if X is the mother of Y.
father_of(X,Y). Returns true if X is the father of Y.
sister_of(X,Y). Returns true if X is the sister of Y.
brother_of(X,Y). Returns true if X is the brother of Y.
现在,我想实现一个功能来检查某人是否是一个孩子/没有姐姐/兄弟。 我已经尝试了以下功能,但是它们都不起作用:
single_child(X) :- (\+ sister_of(X,Y)),(\+ brother_of(X,Y)).
single_child(X) :- not(sister_of(X,Y)), not(brother_of(X,Y)).
single_child(X) :- \+ (sister_of(X,Y),\+ brother_of(X,Y)).
single_child(X) :- not(sister_of(X,Y),brother_of(X,Y)).
有人知道我如何正确实现这样的功能吗?
亲切问候 戴维·J。
答案 0 :(得分:0)
我自己找到了一个解决方案:
single_child(X) :- \+ has_sibling(X),(parent(P,X)).
parent(X,Y) :- father_of(X,Y);mother_of(X,Y).
sibling(X,Y):- parent(Z,X), parent(Z,Y), X\=Y.
has_sibling(X) :- sibling(X,_).