Wikipedia · einfach zusammengefasst · Stand
Operatorassoziativität
Operatorassoziativität bezeichnet vor allem in der Informatik, aber auch Mathematik und Logik die Festlegung, wie komplexere Ausdrücke mit infix-Operatoren, die …
Inhalt4 Abschnitte
Bedeutung der Operatorassoziativität
Operatorassoziativität legt in Informatik, Mathematik und Logik fest, wie komplexe Ausdrücke mit Infix-Operatoren gelesen werden. Infix-Operatoren stehen zwischen zwei Operanden und bezeichnen zweistellige Operationen.
Bei assoziativen Operationen ist die Klammerung gleichgültig. Für Addition und Multiplikation gilt beispielsweise (a+b)+c=a+(b+c) beziehungsweise (a·b)·c=a·(b·c). Das gilt ebenso für Konjunktion (∧) und Disjunktion (∨). Daher kann a+b+c sowohl als (a+b)+c als auch als a+(b+c) verstanden werden.
Bei nicht assoziativen Operationen muss dagegen geregelt werden, ob eine Wiederholung ohne Klammern erlaubt ist und welche Klammerung gemeint ist. Für die Subtraktion gilt a-(b-c)=(a-b)-c nicht allgemein. Der Ausdruck a-b-c bedeutet bei Linksassoziativität (a-b)-c, bei Rechtsassoziativität dagegen a-(b-c).
Linksassoziative Operatoren
Ein binärer Operator * ist linksassoziativ, wenn von links geklammert wird: abc := (ab)c und abcd := ((ab)*c)*d.
Typische Beispiele sind Subtraktion und Division:
- a-b-c = (a-b)-c
- a:b:c = (a:b):c
- a/b/c = (a/b)/c
Bei waagerechten Bruchstrichen bindet jedoch der kürzere Bruchstrich stärker. Daher ist a/(b/c)=a·c/b, während (a/b)/c=a/(b·c) ist.
In vielen Programmiersprachen, unter anderem Haskell, ist die Funktionsanwendung durch Juxtaposition linksassoziativ: f x y z = ((f x) y) z.
Rechtsassoziative Operatoren
Bei rechtsassoziativen Operatoren wird von rechts geklammert: xyz := x*(yz) und wxyz := w*(x*(y*z)).
Die Potenzierung wird als rechtsassoziativ verwendet: x^(y^z) := x^(y^z). Die andere Klammerung (x^y)^z wäre x^(yz). Taschenrechner werten Eingaben der Form x ^ y ^ z jedoch in der Regel linksassoziativ aus, also als (x ^ y) ^ z. Für die gewünschte Rechtsassoziativität muss deshalb x ^ (y ^ z) eingegeben werden.
Auch die Subjunktion wird von den meisten Autoren rechtsassoziativ verwendet: P→Q→R ist als P→(Q→R) zu lesen. In einigen Programmiersprachen wie C ist der Zuweisungsoperator rechtsassoziativ: x = y = z bedeutet x = (y = z). Zuerst erhält y den Wert von z; anschließend wird das Ergebnis dieser Zuweisung, also z, x zugewiesen.
In Haskell ist die Funktionsanwendung mit dem Infix-Operator $ rechtsassoziativ: f $ g $ h $ x = f $ (g $ (h $ x)).
Nicht verkettbare Operatoren
Manche Operatoren sind weder links- noch rechtsassoziativ. Ausdrücke wie a•b•c sind dann verboten, auch wenn die zugehörige Operation assoziativ sein kann.
In Haskell sind beispielsweise die Vergleichsoperatoren ==, <= und > in diesem Sinn nicht-assoziativ. Das gilt, obwohl die Vergleichsoperation zwischen Booleschen Werten, etwa als Funktion 2×2→2, assoziativ ist.