Zum Inhalt springen

Operatorassoziativität

aus Wikipedia, der freien Enzyklopädie

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 <math>+</math> bzw. <math>\cdot</math> notiert werden, assoziative Operationen, es gilt also <math>(a+b)+c=a+(b+c)</math> bzw. <math>(a \cdot b)\cdot c=a \cdot (b \cdot c)</math>, ebenso wie in der Logik die Konjunktion <math>(\land)</math> und Disjunktion <math>(\lor)</math>. Hier ist es gleichgültig, ob <math>a+b+c</math> als <math>(a+b)+c</math> oder als <math>a+(b+c)</math> interpretiert wird.

Bei nicht assoziativen Operationen, wie etwa der Subtraktion (infix notiert durch „–“), gilt <math>a-(b-c) = (a-b)-c</math> nicht allgemein, und daher muss festgelegt werden, ob Ausdrücke wie <math>a-b-c</math> überhaupt erlaubt sind, und, falls sie erlaubt sind, welche Klammerung implizit vorliegen soll. Wird festgelegt, dass „–“ linksassoziativ ist, ist <math>a-b-c</math> wie <math>(a-b)-c</math> zu interpretieren. Soll „–“ dagegen rechtsassoziativ sein, wäre <math>a-b-c</math> wie <math>a-(b-c)</math> zu interpretieren.

Linksassoziative Operatoren

Bei linksassoziativen Operatoren wird implizite Linksklammerung vereinbart<ref><templatestyles src="Webarchiv/styles.css" />Order of operations. (Memento vom 5. September 2017 im Internet Archive) (PDF; 265 kB) Rochester Institute of Technology</ref><ref>The Order of Operations. Education Place</ref><ref>The Order of Operations. Khan Academy (Video, ab 05:40)</ref><ref>Using Order of Operations and Exploring Properties. (PDF; 268 kB) Absatz 9, Virginia Department of Education</ref><ref>Vorrangregeln und Assoziativität. Technische Universität Chemnitz</ref> – ein binärer Operator <math>*</math> gilt somit als linksassoziativ, wenn die Ausdrücke

<math>a*b*c </math> <math>:= (a*b)*c</math>
<math>a*b*c*d </math> <math>:= \bigl((a*b)*c\bigr)*d</math>
etc.

wie gezeigt zu lesen sind. Beispiele für linksassoziative Operatoren sind:

<math>a-b-c </math> <math>= (a-b)-c</math>
<math>a:b:c </math> <math>= (a:b):c</math>
<math>a\div b\div c </math> <math>= (a\div b)\div c</math>
<math>a/b/c </math> <math>= (a/b)/c</math>
      Jedoch: Bei waagerechten Bruchstrichen bindet der kürzere Bruchstrich stärker:
<math>\frac{a}{\frac{b}{c}} </math> <math>= \frac{a}{\bigl(\frac{b}{c}\bigr)} = \frac{a \cdot c}{b} </math>
<math>\frac{\frac{a}{b}}{c} </math> <math>= \frac{\bigl(\frac{a}{b}\bigr)}{c} = \frac{a}{b \cdot c} </math>
  • Funktionsanwendung durch Juxtaposition in vielen Programmiersprachen, u. a. Haskell:
f x y z = ((f x) y) z.

Rechtsassoziative Operatoren

Umgekehrt liegt bei rechtsassoziativen Operatoren <math>*</math> implizite Rechtsklammerung vor, so dass gilt:

<math>x*y*z</math> <math>:=</math> <math>x*(y*z)</math>
<math>w*x*y*z</math> <math>:=</math> <math>w*(x*(y*z)) </math>
etc.

Beispiele für rechtsassoziative Operatoren sind:<ref>Rules for Exponents and the Reasons for Them. (PDF; 344 kB) Western Michigan University</ref>

  • Die Potenzierung: <math>x^{y^z} := x^{(y^z)}</math>, denn <math>(x^y)^z</math> wäre einfach <math>x^{y z}</math>.
    Achtung: Taschenrechner werten Eingaben der Form x ^ 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 <math>P \rightarrow Q \rightarrow R</math> als <math>P \rightarrow (Q \rightarrow R)</math> zu lesen ist.
  • Der Zuweisungsoperator einiger Programmiersprachen, wie C: x = y = z ist gleichbedeutend mit x = (y = z), das heißt, der Variablen y wird zunächst der Wert von z zugewiesen und erst danach das Ergebnis dieser Zuweisung (also der zugewiesene Wert z) der Variablen x zugewiesen.
  • Funktionsanwendung durch infix-$ in Haskell:
f $ g $ h $ x = f $ (g $ (h $ x)).

Weder, noch

Es kann auch sein, dass Ausdrücke wie <math>a\bullet b \bullet c</math> einfach verboten werden, selbst dann, wenn die Operation, für die der Operator <math>\bullet</math> 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 <math>2 \times 2 \to 2</math>) assoziativ ist.

Siehe auch

Einzelnachweise

<references />