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 o fx donde f indica la posición del functor y x e y indican las posiciones de los argumentos. y denota un término con una precedencia inferior o igual a la precedencia del functor, mientras que x denota una precedencia estrictamente inferior.

    • Prefijo: fx , fy
    • Infijo: xfx (no asociativo), xfy (asociativo derecho), yfx (asociativo izquierdo)
    • Postfijo: xf , yf

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow