Точка с запятой при определении правила - PullRequest
0 голосов
/ 30 ноября 2018

Я новичок в Прологе и читаю простую строку кода Пролога:

sibling(X, Y) :- brother(X, Y); sister(X, Y).

Я знаю, было ли это:

sibling(X, Y) :- brother(X, Y), sister(X, Y).

, тогда это означало быбрат (X, Y) И сестра (X, Y) должны быть правдой, чтобы брат (X, Y) был правдой.Это заставляет меня поверить, что ";"представляет оператор или, поэтому:

sibling(X, Y) :- brother(X, Y); sister(X, Y).

оценивать как истинное, если брат (X, Y) ИЛИ сестра (X, Y) истинно?

1 Ответ

0 голосов
/ 30 ноября 2018

Как заметил Люркер, ;/2 является конструкцией управления дизъюнкцией цели Пролога.Кстати, рекомендации по кодированию на Прологе советов против таких предложений, как:

sibling(X, Y) :- brother(X, Y); sister(X, Y).

Предлагаемая альтернатива:

sibling(X, Y) :- brother(X, Y).
sibling(X, Y) :- sister(X, Y).

Но если вы используете дизъюнкцию в теле предложения, всегда пишитеэто между скобками.В этом случае:

sibling(X, Y) :-
    (   brother(X, Y)
    ;   sister(X, Y)
    ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...