Prolog Language
Operatorzy
Szukaj…
Predefiniowane operatory
Predefiniowane operatory zgodnie z ISO / IEC 13211-1 i 13211-2:
| Priorytet | Rodzaj | Operator | Posługiwać się |
|---|---|---|---|
| 1200 | xfx | :- --> | |
| 1200 | fx | :- ?- | Dyrektywa, zapytanie |
| 1100 | xfy | ; | |
| 1050 | xfy | -> | |
| 1000 | xfy | ',' | |
| 900 | fy | \+ | |
| 700 | xfx | = \\= | Termin unifikacja |
| 700 | xfx | == \\== @< @=< @> @>= | Porównanie terminów |
| 700 | xfx | =.. | |
| 700 | xfx | is =:= =\= < > =< >= | Ocena i porównanie arytmetyczne |
| 600 | xfy | : | Kwalifikacja modułu |
| 500 | yfx | + - /\ \/ | |
| 400 | yfx | * / div mod // rem << >> | |
| 200 | xfx | ** | Moc pływaka |
| 200 | xfy | ^ | Zmienna kwantyfikacja, moc całkowita |
| 200 | fy | + - \ | Tożsamość arytmetyczna, negacja; bitowe uzupełnienie |
Wiele systemów zapewnia dalszych operatorów jako rozszerzenie specyficzne dla implementacji:
| Priorytet | Rodzaj | Operator | Posługiwać się |
|---|---|---|---|
| 1150 | fx | dynamic multifile discontiguous initialization | Standardowe dyrektywy |
| 1150 | fx | mode public volatile block meta_predicate | |
| 900 | fy | spy nospy |
Deklaracja operatora
W Prolog operatory niestandardowe można zdefiniować za pomocą op/3 :
op(+Precedence, +Type, :Operator)
Ogłasza, że operator jest operatorem typu z pierwszeństwem. Operator może być również listą nazw, w którym to przypadku wszystkie elementy listy zostaną zadeklarowane jako identyczne operatory.
Pierwszeństwo jest liczbą całkowitą od 0 do 1200, gdzie 0 usuwa deklarację.
Typ stanowi jeden spośród:
xf,yf,xfx,xfy,yfx,fylubfxgdziefoznacza pozycję funktora axiyoznaczają pozycje argumentów.yoznacza termin o pierwszeństwie niższym lub równym pierwszeństwu funktora, natomiastxoznacza ściśle niższy priorytet.- Prefiks:
fx,fy - Infix:
xfx(bez asocjacji),xfy(prawyyfx),yfx(lewyyfx) - Postfiks:
xf,yf
- Prefiks:
Przykładowe użycie:
:- op(900, xf, is_true).
X_0 is_true :-
X_0.
Przykładowe zapytanie:
?- dif(X, a) is_true.
dif(X, a).
Zamawianie terminu
Dwa warunki można porównać za pomocą standardowego zamówienia:
zmienne @ <liczby @ <atomy @ <łańcuchy @ <struktury @ <listy
Uwagi:
Struktury porównują alfabetycznie najpierw przez funktor, potem przez arity, a na koniec przez porównanie każdego argumentu.
Listy najpierw porównywane są według długości, a następnie każdego elementu.
| Zamów operatora | Udaje się, jeśli |
|---|---|
| X @ <Y | X jest mniejsze niż Y w standardowej kolejności |
| X @> Y | X jest większy niż Y w standardowej kolejności |
| X @ = <Y | X jest mniejsze lub równe Y w standardowej kolejności |
| X @> = Y | X jest większy lub równy Y w standardowej kolejności |
Przykładowe zapytania:
?- 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.
Równość terminów
| Operator równości | Udaje się, jeśli |
|---|---|
| X = Y | X można zunifikować z Y |
| X \ = Y | X nie może być zunifikowany z Y |
| X == Y | X i Y są identyczne (tzn. Łączą się bez występowania zmiennych powiązań) |
| X \ == Y | X i Y nie są identyczne |
| X =: = Y | X i Y są arytmetycznie równe |
| X = \ = Y | X i Y nie są równe arytmetycznie |