Поиск…


Дизъюнкция (логическая ИЛИ), неявная или эксплицитная

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 (так как это первое возможное решение) и искать больше решений.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow