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 не являются арифметически равными |