Prolog Language
Los operadores
Buscar..
Operadores predefinidos
Operadores predefinidos según ISO / IEC 13211-1 y 13211-2:
Prioridad | Tipo | Operador (es) | Utilizar |
---|---|---|---|
1200 | xfx | :- --> | |
1200 | fx | :- ?- | Directiva, consulta |
1100 | xfy | ; | |
1050 | xfy | -> | |
1000 | xfy | ',' | |
900 | fy | \+ | |
700 | xfx | = \\= | Unificación del término |
700 | xfx | == \\== @< @=< @> @>= | Comparación de términos |
700 | xfx | =.. | |
700 | xfx | is =:= =\= < > =< >= | Evaluación aritmética y comparación. |
600 | xfy | : | Cualificación del módulo |
500 | yfx | + - /\ \/ | |
400 | yfx | * / div mod // rem << >> | |
200 | xfx | ** | Poder de flotación |
200 | xfy | ^ | Cuantificación variable, potencia entera |
200 | fy | + - \ | Identidad aritmética, negación; complemento bit a bit |
Muchos sistemas proporcionan operadores adicionales como una extensión específica de implementación:
Prioridad | Tipo | Operador (es) | Utilizar |
---|---|---|---|
1150 | fx | dynamic multifile discontiguous initialization | Directivas estandar |
1150 | fx | mode public block volatile meta_predicate | |
900 | fy | spy nospy |
Declaración del operador
En Prolog, los operadores personalizados se pueden definir usando op/3
:
op(+Precedence, +Type, :Operator)
Declara que Operador es un operador de un Tipo con una Precedencia. El operador también puede ser una lista de nombres, en cuyo caso todos los elementos de la lista se declaran como operadores idénticos.
La precedencia es un número entero entre 0 y 1200, donde 0 elimina la declaración.
El tipo es uno de los siguientes:
xf
,yf
,xfx
,xfy
,yfx
,fy
ofx
dondef
indica la posición del functor yx
ey
indican las posiciones de los argumentos.y
denota un término con una precedencia inferior o igual a la precedencia del functor, mientras quex
denota una precedencia estrictamente inferior.- Prefijo:
fx
,fy
- Infijo:
xfx
(no asociativo),xfy
(asociativo derecho),yfx
(asociativo izquierdo) - Postfijo:
xf
,yf
- Prefijo:
Ejemplo de uso:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Consulta de ejemplo:
?- dif(X, a) is_true.
dif(X, a).
Orden de plazo
Se pueden comparar dos términos a través del pedido estándar:
variables @ <números @ <átomos @ <cadenas @ <estructuras @ <listas
Notas:
Las estructuras se comparan alfabéticamente por functor primero, luego por aridad y por último por la comparación de cada argumento.
Las listas comparan por longitud primero, luego por cada elemento.
Operador de pedidos | Tiene éxito si |
---|---|
X @ <Y | X es menor que Y en el orden estándar |
X @> Y | X es mayor que Y en el orden estándar |
X @ = <Y | X es menor o igual que Y en el orden estándar |
X @> = Y | X es mayor o igual que Y en el orden estándar |
Consultas de ejemplo:
?- 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.
Igualdad de términos
Operador de igualdad | Tiene éxito si |
---|---|
X = Y | X puede ser unificado con Y |
X \ = Y | X no puede ser unificado con Y |
X == Y | X e Y son idénticos (es decir, se unifican sin que se produzcan enlaces de variables) |
X \ == Y | X e Y no son idénticos |
X =: = Y | X e Y son aritméticamente iguales |
X = \ = Y | X e Y no son aritméticamente iguales |