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 <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 | *
| {{#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: || }}Der 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: | [] | [ | ( }}{{#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: | [] | [ | ( }}{{#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: | [] | [ | ( }}{{#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!{{#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}} }} ({{#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: || }}{{#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: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#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: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#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 |}}{{#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 Formx ^ y ^ zgleichwohl in der Regel linksassoziativ, also so aus, als ob sie in der Form(x ^ y) ^ zeingegeben 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 = zist gleichbedeutend mitx = (y = z), das heißt, der Variablenywird zunächst der Wert vonzzugewiesen und erst danach das Ergebnis dieser Zuweisung (also der zugewiesene Wertz) der Variablenxzugewiesen. - 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 />