Prolog Language
operatori
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
ofx
dovef
indica la posizione del funtore ex
edy
indicano le posizioni degli argomenti.y
denota un termine con una precedenza inferiore o uguale alla precedenza del funtore, mentrex
denota una precedenza strettamente inferiore.- Prefisso:
fx
,fy
- Infix:
xfx
(non associativo),xfy
(associativo a destra),yfx
(associativo a sinistra) - Postfix:
xf
,yf
- Prefisso:
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 |