Ricerca…


Operatori predefiniti

Operatori predefiniti secondo ISO / IEC 13211-1 e 13211-2:

Priorità genere Operator (s) Uso
1200 XFX :- -->
1200 fx :- ?- Direttiva, query
1100 xfy ;
1050 xfy ->
1000 xfy ','
900 fy \+
700 XFX = \\= Termine unificazione
700 XFX == \\== @< @=< @> @>= Termine confronto
700 XFX =..
700 XFX is =:= =\= < > =< >= Valutazione e confronto aritmetico
600 xfy : Qualifica del modulo
500 YFX + - /\ \/
400 YFX * / div mod // rem << >>
200 XFX ** Potere galleggiante
200 xfy ^ Quantificazione variabile, potenza intera
200 fy + - \ Identità aritmetica, negazione; complemento bit per bit

Molti sistemi forniscono ulteriori operatori come un'estensione specifica dell'implementazione:

Priorità genere Operator (s) Uso
1150 fx initialization multifile dynamic discontiguous Direttive standard
1150 fx mode block volatile public meta_predicate
900 fy spy nospy

Dichiarazione dell'operatore

In Prolog, gli operatori personalizzati possono essere definiti utilizzando op/3 :

op(+Precedence, +Type, :Operator)

  • Dichiara l'operatore come operatore di un tipo con una precedenza. L'operatore può anche essere un elenco di nomi nel qual caso tutti gli elementi dell'elenco sono dichiarati operatori identici.

  • La precedenza è un numero intero compreso tra 0 e 1200, dove 0 rimuove la dichiarazione.

  • Tipo è uno di: xf , yf , xfx , xfy , yfx , fy o fx dove f indica la posizione del funtore e x ed y indicano le posizioni degli argomenti. y denota un termine con una precedenza inferiore o uguale alla precedenza del funtore, mentre x denota una precedenza strettamente inferiore.

    • Prefisso: fx , fy
    • Infix: xfx (non associativo), xfy (associativo a destra), yfx (associativo a sinistra)
    • Postfix: xf , yf

Esempio di utilizzo:

:- op(900, xf, is_true).

X_0 is_true :-
  X_0.

Query di esempio:

?- dif(X, a) is_true.
dif(X, a).

Ordinamento a termine

Due termini possono essere confrontati tramite l'ordinamento standard:

variabili @ <numeri @ <atomi @ <stringhe @ <strutture @ <liste

Gli appunti:

  • Le strutture si confrontano alfabeticamente prima con il functor, poi con l'arity e infine con il confronto di ogni argomento.

  • Gli elenchi confrontano prima per lunghezza, quindi per ciascun elemento.

Ordina l'operatore Succede se
X @ <Y X è inferiore a Y nell'ordine standard
X @> Y X è maggiore di Y nell'ordine standard
X @ = <Y X è minore o uguale a Y nell'ordine standard
X @> = Y X è maggiore o uguale a Y nell'ordine standard

Query di esempio:

?- 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.

Termine uguaglianza

Operatore di uguaglianza Succede se
X = Y X può essere unificato con Y
X \ = Y X non può essere unificato con Y
X == Y X e Y sono identici (cioè si uniscono senza che si verifichino legami variabili)
X \ == Y X e Y non sono identici
X =: = Y X e Y sono aritmeticamente uguali
X = \ = Y X e Y non sono aritmeticamente uguali


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow