Prolog Language
Les opérateurs
Recherche…
Opérateurs prédéfinis
Opérateurs prédéfinis selon ISO / IEC 13211-1 et 13211-2:
Priorité | Type | Les opérateurs) | Utilisation |
---|---|---|---|
1200 | xfx | :- --> | |
1200 | fx | :- ?- | Directive, requête |
1100 | xfy | ; | |
1050 | xfy | -> | |
1000 | xfy | ',' | |
900 | fy | \+ | |
700 | xfx | = \\= | Unification du terme |
700 | xfx | == \\== @< @=< @> @>= | Comparaison de terme |
700 | xfx | =.. | |
700 | xfx | is =:= =\= < > =< >= | Évaluation arithmétique et comparaison |
600 | xfy | : | Qualification de module |
500 | yfx | + - /\ \/ | |
400 | yfx | * / div mod // rem << >> | |
200 | xfx | ** | Pouvoir flottant |
200 | xfy | ^ | Quantification variable, puissance entière |
200 | fy | + - \ | Identité arithmétique, négation; complément binaire |
De nombreux systèmes fournissent d'autres opérateurs en tant qu'extension spécifique à la mise en œuvre:
Priorité | Type | Les opérateurs) | Utilisation |
---|---|---|---|
1150 | fx | dynamic multifile discontiguous initialization | Directives standard |
1150 | fx | mode block volatile public meta_predicate | |
900 | fy | spy nospy |
Déclaration de l'opérateur
Dans Prolog, les opérateurs personnalisés peuvent être définis avec op/3
:
op(+Precedence, +Type, :Operator)
Déclare l'opérateur comme étant un opérateur d'un type avec une priorité. L'opérateur peut également être une liste de noms, auquel cas tous les éléments de la liste sont déclarés comme étant des opérateurs identiques.
La priorité est un entier compris entre 0 et 1200, où 0 supprime la déclaration.
Le type est l'un de:
xf
,yf
,xfx
,xfy
,yfx
,fy
oufx
oùf
indique la position du foncteur etx
ety
indiquent les positions des arguments.y
désigne un terme avec une priorité inférieure ou égale à la priorité du foncteur, alors quex
désigne une priorité strictement inférieure.- Préfixe:
fx
,fy
- Infix:
xfx
(non associatif),xfy
(associatif droit),yfx
(associatif gauche) - Postfix:
xf
,yf
- Préfixe:
Exemple d'utilisation:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Exemple de requête:
?- dif(X, a) is_true.
dif(X, a).
Commande à terme
Deux termes peuvent être comparés via la commande standard:
variables @ <numéros @ <atomes @ <chaînes @ <structures @ <listes
Remarques:
Les structures se comparent alphabétiquement par foncteur d'abord, puis par arité et enfin par comparaison de chaque argument.
Les listes se comparent d'abord par longueur, puis par élément.
Opérateur de commande | Réussit si |
---|---|
X @ <Y | X est inférieur à Y dans l'ordre standard |
X @> Y | X est supérieur à Y dans l'ordre standard |
X @ = <Y | X est inférieur ou égal à Y dans l'ordre standard |
X @> = Y | X est supérieur ou égal à Y dans l'ordre standard |
Exemple de requêtes:
?- 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.
Égalité des termes
Opérateur d'égalité | Réussit si |
---|---|
X = Y | X peut être unifié avec Y |
X \ = Y | X ne peut pas être unifié avec Y |
X == Y | X et Y sont identiques (c’est-à-dire qu’ils s’unifient sans aucune liaison de variable) |
X \ == Y | X et Y ne sont pas identiques |
X =: = Y | X et Y sont arithmétiquement égaux |
X = \ = Y | X et Y ne sont pas arithmétiquement égaux |