Prolog Language
Контрольные структуры
Поиск…
Дизъюнкция (логическая ИЛИ), неявная или эксплицитная
Prolog пробует альтернативные предложения для предиката в порядке появления:
likes(alice, music).
likes(bob, hiking).
// Either alice likes music, or bob likes hiking will succeed.
Оператор дизъюнкции (OR) ;
может использоваться для выражения этого в одном правиле:
likes(P,Q) :-
( P = alice , Q = music ) ; ( P = bob , Q = hiking ).
Для ясности здесь важны скобки. См этого вопроса об относительной приоритетности для связи ,
и дизъюнкции ;
,
Сопряжение (логическое И)
Конъюнкция (логическая И) представлена запятой ,
оператором (среди других ролей).
В запросе может отображаться взаимосвязь между предложениями:
?- X = 1, Y = 2.
Конъюнкция также может возникать между предложениями субгума в теле правила:
triangleSides(X,Y,Z) :-
X + Y > Z, X + Z > Y, Y + Z > X.
Вырезать (удалить точки выбора)
Иногда желательно, чтобы Prolog отказался от альтернативных решений. Основным инструментом, доступным программисту, чтобы остановить пролог от дальнейших действий в обратном направлении, является оператор сокращения. рассмотрим следующее.
% (percent signs mean comments)
% a is the parent of b, c, and d.
parent(a,b).
parent(a,c).
parent(a,d).
Здесь parent/2
предикат parent/2
преуспевает более одного раза, когда
?- parent(a,X).
называется. Чтобы остановить пролог от поиска большего количества решений после первого поиска, вы должны использовать оператор cut, например.
?- parent(a,X), !.
Это будет иметь X, равный b (так как это первое возможное решение) и искать больше решений.