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.

War es hilfreich?

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.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top