Prolog Language
операторы
Поиск…
Предопределенные операторы
Предопределенные операторы в соответствии с ISO / IEC 13211-1 и 13211-2:
| приоритет | Тип | Оператор (ы) | использование |
|---|---|---|---|
| 1200 | XFX | :- --> | |
| 1200 | FX | :- ?- | Директива, запрос |
| 1100 | XFY | ; | |
| 1050 | XFY | -> | |
| 1000 | XFY | ',' | |
| 900 | FY | \+ | |
| 700 | XFX | = \\= | Объединение терминов |
| 700 | XFX | == \\== @< @=< @> @>= | Сравнение сроков |
| 700 | XFX | =.. | |
| 700 | XFX | is =:= =\= < > =< >= | Арифметическая оценка и сравнение |
| 600 | XFY | : | Квалификация модуля |
| 500 | yfx | + - /\ \/ | |
| 400 | yfx | * / div mod // rem << >> | |
| 200 | XFX | ** | Поплавковая мощность |
| 200 | XFY | ^ | Переменная количественная оценка, целая мощность |
| 200 | FY | + - \ | Арифметическая идентичность, отрицание; побитовое дополнение |
Многие системы предоставляют дальнейшие операторы в качестве расширения, специфичного для реализации:
| приоритет | Тип | Оператор (ы) | использование |
|---|---|---|---|
| 1150 | FX | dynamic multifile discontiguous initialization | Стандартные директивы |
| 1150 | FX | mode public volatile block meta_predicate | |
| 900 | FY | spy nospy |
Объявление оператора
В Prolog пользовательские операторы могут быть определены с помощью op/3 :
op(+Precedence, +Type, :Operator)
Объявляет оператора оператором типа с приоритетом. Оператор также может быть списком имен, и в этом случае все элементы списка объявляются одинаковыми операторами.
Приоритет - целое число от 0 до 1200, где 0 удаляет объявление.
Тип является одним из:
xf,yf,xfx,xfy,yfx,fyилиfxгдеfуказывает положение функтора, аxиyуказывают позиции аргументов.yобозначает термин с приоритетом, меньшим или равным приоритету функтора, тогда какxобозначает строго более низкий приоритет.- Префикс:
fx,fy -
xfx:xfx(не ассоциативный),xfy(правый ассоциативный),yfx(левый ассоциативный) - Postfix:
xf,yf
- Префикс:
Пример использования:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Пример запроса:
?- dif(X, a) is_true.
dif(X, a).
Срочный заказ
Два условия можно сравнить по стандартным заказам:
переменные @ <numbers @ <atom @ <строки @ <структуры @ <списки
Заметки:
Структуры сначала сравниваются по функтору, а затем по арности и, наконец, по сравнению каждого аргумента.
Списки сначала сравниваются по длине, затем по каждому элементу.
| Оператор заказа | Преуспевает, если |
|---|---|
| X @ <Y | X меньше Y в стандартном порядке |
| X @> Y | X больше Y в стандартном порядке |
| X @ = <Y | X меньше или равно Y в стандартном порядке |
| X @> = Y | X больше или равно Y в стандартном порядке |
Примеры запросов:
?- alpha @< beta.
true.
?- alpha(1) @< beta.
false.
?- alpha(X) @< alpha(1).
true.
?- alpha(X) @=< alpha(Y).
true.
?- alpha(X) @> alpha(Y).
false.
?- compound(z) @< compound(inner(a)).
true.
Равномерность
| Оператор равенства | Преуспевает, если |
|---|---|
| X = Y | X можно объединить с Y |
| X \ = Y | X не может быть объединен с Y |
| X == Y | X и Y идентичны (т.е. они объединяются без каких-либо переменных привязок) |
| X \ == Y | X и Y не идентичны |
| X =: = Y | X и Y арифметически равны |
| X = \ = Y | X и Y не являются арифметически равными |