如何确定一个孩子是否是PROLOG家谱中的一个孩子?

时间:2019-05-31 11:20:31

标签: prolog swi-prolog

我目前正在编写一个表示家庭关系的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。

1 个答案:

答案 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,_).