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 ou fxf indique la position du foncteur et x et y indiquent les positions des arguments. y désigne un terme avec une priorité inférieure ou égale à la priorité du foncteur, alors que x désigne une priorité strictement inférieure.

    • Préfixe: fx , fy
    • Infix: xfx (non associatif), xfy (associatif droit), yfx (associatif gauche)
    • Postfix: xf , yf

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow