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" />{{#if:20170905152546

      | {{#ifeq: 20170905152546 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20170905152546}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20170905152546}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Order of operations. | {{#invoke:WLink|getEscapedTitle|Order of operations.}} | {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20170905152546|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf}}
    || {{#if:  || }}
  }}{{#if: Order of operations.
    | {{#if: {{#invoke:WLink|isBracketedLink|Order of operations.}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://www.rit.edu/studentaffairs/asc/sites/rit.edu.studentaffairs.asc/files/docs/services/resources/handouts/A3_OrderofOperations_BP_9_22_14.pdf }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} (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 />