Как определить, является ли ребенок единственным ребенком в генеалогическом дереве PROLOG? - PullRequest
0 голосов
/ 31 мая 2019

В настоящее время я пишу программу 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)).

Кто-нибудь знает, как я могу правильно реализовать такую ​​функцию?

С уважением, Дэвид Дж.

1 Ответ

0 голосов
/ 31 мая 2019

Я сам нашел решение:

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,_).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...