Prolog Infix Operator Definition
-
27-10-2019 - |
Frage
Ich lerne kürzlich über Prolog und finde die drei Typen, die zur Definition von Infix -Operatoren verwirrt sind.
Was sind die Unterschiede zwischen XFX, XFY und YFX, wenn Sie den Typ eines Operators angeben? Ich habe über das Problem gegoogelt und habe nichts Nützliches gefunden.
Ich habe versucht, die folgenden Codes in Prolog zu tippen:
:- op(500,yfx,is_alive).
is_alive(A,B) :- display([A,B]).
:- op(500,xfy,is_alive2).
is_alive2(A,B) :- display([A,B]).
:- op(500,xfx,is_alive3).
is_alive3(A,B) :- display([A,B]).
und die Ausgabe:
| ?- 1 is_alive 2.
'.'(1,'.'(2,[]))
yes
| ?- 1 is_alive2 2.
'.'(1,'.'(2,[]))
yes
| ?- 1 is_alive3 2.
'.'(1,'.'(2,[]))
yes
Die Ergebnisse zeigten keinen Unterschied für mich.
Lösung
Der 'Typ' des Operators steuert die Assoziativität, z. B. den Ausdruck "5 - 4 - 3" als "(5 - 4) - 3", der als linke Assoziativität oder als "5 - (4 - 3) bekannt ist ", was richtig Assoziativität ist.
Wenn der minus-Betreiber wie gewöhnlich arbeiten sollte, muss definiert als "YFX" definiert werden, was ihn links macht. Andere Typen als 'XFX und' XFY 'sind Variationen dazu. Sehen Sie mehr bei http://www.cse.unsw.edu.au/~billw/cs9414/notes/polog/op.html.
Andere Tipps
Wenn Ihr Prolog ISO -konform ist, können Sie verwenden write_canonical Analyse der Wirkung von Vorrang und Assoziativität von Operatoren. Zum Beispiel
?- write_canonical(1+2*3).
+(1,*(2,3))
true.