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 für zweistellige Operationen stehen, die nicht unbedingt assoziativ sind, zu lesen sind.
Zum Beispiel sind in der Mathematik die Addition und Multiplikation, die üblicherweise mit {\displaystyle +} bzw. {\displaystyle \cdot } notiert werden, assoziative Operationen, es gilt also {\displaystyle (a+b)+c=a+(b+c)} bzw. {\displaystyle (a\cdot b)\cdot c=a\cdot (b\cdot c)}, ebenso wie in der Logik die Konjunktion {\displaystyle (\land )} und Disjunktion {\displaystyle (\lor )}. Hier ist es gleichgültig, ob {\displaystyle a+b+c} als {\displaystyle (a+b)+c} oder als {\displaystyle a+(b+c)} interpretiert wird.
Bei nicht assoziativen Operationen, wie etwa der Subtraktion (infix notiert durch „–"), gilt {\displaystyle a-(b-c)=(a-b)-c} nicht allgemein, und daher muss festgelegt werden, ob Ausdrücke wie {\displaystyle a-b-c} überhaupt erlaubt sind, und, falls sie erlaubt sind, welche Klammerung implizit vorliegen soll. Wird festgelegt, dass „–" linksassoziativ ist, ist {\displaystyle a-b-c} wie {\displaystyle (a-b)-c} zu interpretieren. Soll „–" dagegen rechtsassoziativ sein, wäre {\displaystyle a-b-c} wie {\displaystyle a-(b-c)} zu interpretieren.
Linksassoziative Operatoren
Bei linksassoziativen Operatoren wird implizite Linksklammerung vereinbart[1] [2] [3] [4] [5] – ein binärer Operator {\displaystyle *} gilt somit als linksassoziativ, wenn die Ausdrücke
-
{\displaystyle a*b*c} {\displaystyle :=(a*b)*c}{\displaystyle a*b*c*d} {\displaystyle :={\bigl (}(a*b)*c{\bigr )}*d}etc.
wie gezeigt zu lesen sind. Beispiele für linksassoziative Operatoren sind:
- Funktionsanwendung durch Juxtaposition in vielen Programmiersprachen, u. a. Haskell:
f x y z
=((f x) y) z
.
Rechtsassoziative Operatoren
Umgekehrt liegt bei rechtsassoziativen Operatoren {\displaystyle *} implizite Rechtsklammerung vor, so dass gilt:
-
{\displaystyle x*y*z} {\displaystyle :=} {\displaystyle x*(y*z)}{\displaystyle w*x*y*z} {\displaystyle :=} {\displaystyle w*(x*(y*z))}etc.
Beispiele für rechtsassoziative Operatoren sind:[6]
- Die Potenzierung: {\displaystyle x^{y^{z}}:=x^{(y^{z})}}, denn {\displaystyle (x^{y})^{z}} wäre einfach {\displaystyle x^{yz}}.
Achtung: Taschenrechner werten Eingaben der Formx ^ y ^ z
gleichwohl in der Regel linksassoziativ, also so aus, als ob sie in der Form(x ^ y) ^ z
eingegeben worden wären – bei Ausdrücken dieser Form muss daher die Rechtsassoziativität der Potenzierung stets mittels eigener Klammersetzung erzwungen werden:x ^ (y ^ z)
. - Die Subjunktion in der Logik wird von den meisten Autoren rechtssassoziativ verwendet, das heißt, dass {\displaystyle P\rightarrow Q\rightarrow R} als {\displaystyle P\rightarrow (Q\rightarrow R)} zu lesen ist.
- Der Zuweisungsoperator einiger Programmiersprachen, wie C:
x = y = z
ist gleichbedeutend mitx = (y = z)
, das heißt, der Variableny
wird zunächst der Wert vonz
zugewiesen und erst danach das Ergebnis dieser Zuweisung (also der zugewiesene Wertz
) der Variablenx
zugewiesen. - Funktionsanwendung durch infix-
$
in Haskell:
f $ g $ h $ x
=f $ (g $ (h $ x))
.
Weder, noch
Es kann auch sein, dass Ausdrücke wie {\displaystyle a\bullet b\bullet c} einfach verboten werden, selbst dann, wenn die Operation, für die der Operator {\displaystyle \bullet } steht, assoziativ ist.
So ist zum Beispiel in Haskell der Vergleichsoperator ==
, wie auch <=
,>
usw., in diesem Sinne „nicht-assoziativ", obwohl die Vergleichsoperation zwischen Booleschen Werten etwa (als Funktion {\displaystyle 2\times 2\to 2}) assoziativ ist.
Siehe auch
Einzelnachweise
- ↑ Order of operations. (Memento vom 5. September 2017 im Internet Archive ) (PDF; 265 kB) Rochester Institute of Technology
- ↑ The Order of Operations. Education Place
- ↑ The Order of Operations. Khan Academy (Video, ab 05:40)
- ↑ Using Order of Operations and Exploring Properties. (PDF; 268 kB) Absatz 9, Virginia Department of Education
- ↑ Vorrangregeln und Assoziativität. Technische Universität Chemnitz
- ↑ Rules for Exponents and the Reasons for Them. (PDF; 344 kB) Western Michigan University