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
,fy
lubfx
gdzief
oznacza pozycję funktora ax
iy
oznaczają pozycje argumentów.y
oznacza termin o pierwszeństwie niższym lub równym pierwszeństwu funktora, natomiastx
oznacza ś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 |