Übersicht 2 Repräsentation, Struktur und Interpretation von einfachen Rechenvorschriften 2.1 Arithmetische Ausdrücke und ihre Struktur 2.2 Interpretation und Auswertung einfacher arithmetischer Ausdrücke 2.3 Namen und Umgebungen 2.4 Ausdrücke als Rechenvorschriften für Funktionen 2.5 Bedingte Rechenvorschriften 2.6 Kombination von Rechenvorschriften und Rekursion 2.7 Funktionen als Argumente und Resultate von Rechenvorschriften 2.8 Programme als Strukturen von Rechenvorschriften 2.9 Grenzen und Kosten von Rechenvorschriften © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-1 Einleitung • Ziel: Einführung einer ersten Form von (bzw. Sprache für) Rechenvorschriften, die zur Beschreibung von Algorithmen dienen können • Mögliche Herangehensweisen – bottom-up oder maschinenorientiert: Wähle konkrete, existierende Maschine und benutze eine von ihr direkt unterstützte, sog. maschinennahe, Sprache zur Steuerung. – top-down oder problemorientiert: Wähle und definiere Sprache zur Beschreibung von Problemlösungen und stelle sicher, daß nur effektive Beschreibungen möglich sind. • Vorgehen in dieser Vorlesung: problemorientiert • Konkrete Sprache: Scheme – entwickelt am MIT – Dialekt von Lisp – funktionale Sprache © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-2 Funktionale Sprachen … • Basis funktionaler Sprachen: mathematischer Begriff der Funktion • Eine Funktion – nimmt ein oder mehrere Argumente als Eingabe und – liefert den entsprechenden Funktionswert als Ausgabe. • Eine Rechenvorschrift definiert das Verhalten einer Funktion, indem sie in einer eindeutigen Weise beschreibt, wie die Funktion ihre Eingabe zur Ausgabe transformiert. • Aufbau funktionaler Sprachen: Ausgehend von einer Menge von primitiven Funktionen (Basis, Grundbausteine), deren Verhalten als vordefiniert bzw. vorgegeben angenommen wird, werden durch einfache Konstruktionsvorschriften neue und komplexere Funktionen schrittweise aufgebaut. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-3 … Funktionale Sprachen • Typische Konstruktionsprinzipien: – Hintereinanderanwendung von Funktionen passender Definitionsund Wertebereiche Beispiel: g: A ! B f: B ! C f o g: A ! C mit f o g(x) = f(g(x)) – Zuordnen von Namen zu Funktionen, die dann als Platzhalter für die explizit hingeschriebene Funktionsdefinition dienen – Spezielle Steuerungsfunktionen wie Konditionale © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-4 Hintergrund • Eine Programmiersprache – dient dazu, dem Computer mitzuteilen, was er tun soll. – dient als ein Rahmenwerk zur Organisation unserer Vorstellungen über die im Computer ablaufenden Berechnungsvorgänge. – benötigt Mittel, um einfache Ideen zu komplexen zusammenzusetzen. • Diese Ziele werden durch Bereitstellung folgender Mechanismen in einer Programmiersprache erreicht: – Primitive Ausdrücke, welche die einfachsten Elemente der Sprache repräsentieren. – Mittel zur Kombination, wodurch zusammengesetzte komplexere Elemente aus einfacheren Elementen entstehen. – Mittel zur Abstraktion, wodurch zusammengesetzte Elemente benannt und als Ganzes manipuliert werden können. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-5 2.1 Arithmetische Ausdrücke und ihre Struktur • Arithmetische Ausdrücke bilden wesentliche Grundlage jeder Programmiersprache. • Beispiel: Rechnen mit Ausdrücken der Form (4 + 1) (1 + (1 + (1 + (1 + 1)))) ((3 ! 4) + 7) durch Umwandlung in kürzere Ausdrücke mit gleicher Bedeutung (Vereinfachung) (4 + 1) " 5 ((3 ! 4) + 7) " (12 + 7) " 19 oder durch Ausnutzen von Aussagen über die Beziehung zwischen Ausdrücken (4 + 1) ist gleich (1 + (1 + (1 + (1 + 1)))), da (4 + 1) " 5 und (1 + (1 + (1 + (1 + 1)))) " (1 + (1 + (1 + 2))) " (1 + (1 + 3)) " (1 + 4) " 5 • Argumentation ist nur zulässig, da Bedeutung von + bzw. Rechenregeln, z.B. Kommutativgesetz a + b = b + a, bekannt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-6 Was wird benötigt? • Ziel: Beziehung zwischen Repräsentation und Bedeutung arithmetischer Ausdrücke muß durch eine klare Definition formal beschrieben werden. • Repräsentation einfacher arithmetischer Ausdrücke benötigt – Numerale, d.h. Zeichenfolgen, die für Zahlen aus N0 stehen – Operatorsymbole wie +,–,!,… als Zeichen für die entsprechenden Funktionen N0 " N0 ! N0 – Regeln, die die Syntax, d.h. die Struktur, gültiger Ausdrücke beschreiben © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-7 Syntax und Interpretation • Beispiel: 2 + 3 ((1) + 5) ((2 + 3) ! 4) sind gültige arithmetische Ausdrücke. (2 3 5) (+ ! 14))( ((2 +) ! (4) repräsentieren keine gültigen arithmetischen Ausdrücke. • Syntax ist wesentlich für die Zuordnung von Bedeutung, d.h. die Interpretation von Ausdrücken, denn normalerweise wird die Struktur als Grundlage für die Bedeutungsbeschreibung, d. h. die Semantik, benutzt. • Beispiel: Interpretiere ((2 + 3) ! 4) so als Zahl aus N0 : ((2 + 3) ! 4) " (5 ! 4) " 20 jedoch nicht so: ((2 + 3) ! 4) " (2 + 12) " 14 da die Struktur (hier durch Klammerung dargestellt) die Bedeutung mit festlegt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-8 Alphabet # und Konkatenation • Nächster Schritt: Strukturdefinition für arithmetische Ausdrücke, die die erlaubten Zeichen und ihre erlaubten Kombinationsmöglichkeiten angibt. • Definition: Z = { '0', '1', '2', … , '8', '9' } sei die Menge der Dezimalziffern. OP = { '+', '!' } sei die Menge der Operatorsymbole. H = { ' ', '(', ')' } sei die Menge der Hilfszeichen. Die Menge # = Z ( OP ( H sei der Zeichenvorrat für arithmetische Ausdrücke. # wird auch als Alphabet bezeichnet. • Die Aneinanderreihung von Zeichen eines Alphabets bezeichnet man als Konkatenation. Beispiel: '357' entsteht durch Konkatenation der Zeichen '3', '5' und '7'. • '.' bezeichnet den Konkatenationsoperator: © Klaus Hinrichs '35'.'7' " '357' Informatik I – Repräsentation, Struktur und Interpretation … 2-9 Worte über # • Definition der Menge # erfolgt durch explizite Aufzählung. • Menge aller Worte über #, d.h. der durch Konkatenation entstehenden endlichen Folgen von Zeichen aus #, kann man nicht durch explizite Aufzählung definieren, da es sich um eine unendliche Menge handelt. • Ausgehend von endlich vielen, endlichen Grundbausteinen wird durch eine Bildungsregel angegeben, wie aus schon vorhandenen Elementen neue Elemente konstruiert werden können " induktive Definition. • Definition: Die Menge #* aller Worte über # ist durch die folgenden vier Regeln vollständig definiert: 1. Das leere Wort $ ist ein Wort über #. 2. % s & #: s ist ein Wort über #. 3. Ist ' ein Wort über # und s & #, dann ist die Konkatenation '.s ein Wort über #. 4. Alle Worte über # sind durch endlich häufige Anwendung der Regeln 1 - 3 definiert. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-10 Worte über #, Wortlänge • Regel 4 $ jedes ' & #* ist endlich, d.h. es entsteht aus der Konkatenation endlich vieler Zeichen aus #. • #* ist eine unendliche Menge, die aus endlichen Wörtern besteht. • Beispiele: '1' '342' '() () !+12 2 ' '(3 ! 4)' sind Worte über #, aber nicht '(123 + 12@' da '@' nicht in # vorkommt. • Die Funktion length: #* ! N0 gibt für jedes ' & #* seine Länge zurück, d.h. die Anzahl der Zeichen aus #, aus denen ' aufgebaut ist. Formale Definition unter Ausnutzung der Bildungsregeln für #*: 1. length($) = 0 2. % s & #: length(s) = 1 3. % ' & #* % s & #: length('.s) = length(') + 1 © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-11 Wortlänge, Position • Rekursive Berechnung der Länge eines Wortes durch Zerlegung in die konkatenierten Zeichen • Nach endlich vielen Schritten wird einer der Fälle 1 oder 2 erreicht, und es resultiert eine natürliche Zahl. • Benennung von Zeichen über ihre Position in einem Wort: Sei ' & #* mit length(') = n. Für 1 ! i ! n bezeichnet '[i] das von links aus gezählte i-te Zeichen von '. • Beispiel: ' = '1+ 4()78)' entsteht durch sukzessive Konkatenation '1' " '1'.'+' " '1+'.' ' " '1+ '.'4' " '1+ 4'.'(' " '1+ 4('.')' " '1+ 4()'.'7' " '1+ 4()7'.'8' " '1+ 4()78'.')' " '1+ 4()78)' $ '[1] = '1', '[3] = ' ', '[4] = '4' © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-12 Syntax arithmetischer Ausdrücke … • Definition: Jedes Element der Menge NUM der Numerale ist durch endlich häufige Anwendung der beiden folgenden Regeln konstruierbar: 1. Jede Ziffer z & Z ist ein Numeral. 2. Ist n ein Numeral und z & Z eine Ziffer, dann ist auch n.z ein Numeral. • Nächster Schritt: Verknüpfung von Numeralen aus NUM durch Operatorsymbole aus OP unter Verwendung der Hilfssymbole aus H zu Ausdrücken • Notationen für Infix a+b a + (b ! c) (a + b) ! c arithmetische Präfix + a b +a!bc !+abc Ausdrücke: Postfix a b + abc!+ ab+c! Klammerfreie oder Polnische Notation positioniert die Operatoren entweder vor (Präfix) oder hinter (Postfix oder Suffix) die Operanden. • Wir verwenden wie Scheme eine geklammerte Präfix-Schreibweise: (+ a b) (+ a (! b c)) (! (+ a b) c) © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-13 … Syntax arithmetischer Ausdrücke • Definition: Jedes Element der Menge EXP der arithmetischen Ausdrücke ist durch endlich häufige Anwendung der beiden folgenden Regeln konstruierbar: 1. Jedes Numeral num & NUM ist ein Ausdruck aus EXP. 2. Sind exp1 und exp2 aus EXP und ist op & OP ein Operatorsymbol, dann ist auch '(op exp1 exp2 )' ein arithmetischer Ausdruck aus EXP. • Festlegung von Bindungsstärken bzw. Prioritätsregeln für Operatorzeichen nicht nötig: (! 4 (+ 3 2)) • Alternativen zur vollständig geklammerten Präfix-Schreibweise erhielte man durch Änderung des Ausdrucks in Regel 2 in: – vollständig geklammerte Infix-Notation '(exp1 op exp2 )': (4 ! (3 + 2)) – mathematische Funktionsnotation 'op(exp1 , exp2 )': !(4,+(3,2)) – ungeklammerte Präfix-Notation 'op exp1 exp2': !4+32 – ungeklammerte Postfix-Notation 'exp1 exp2 op': 432+! © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-14 Baumdarstellung • Bäume zur Beschreibung hierarchisch strukturierter Objekte, z.B. arithmetische Ausdrücke, Dateisysteme, Vererbungsbeziehungen • Baum besteht entweder – aus einem einzelnen Knoten, oder – einem Knoten, der direkt mit k weiteren Bäumen verbunden ist. Der Knoten selbst heißt Wurzel des aus ihm und den verbundenen Teilbäumen bestehenden Baums. • Graphische Darstellung von Bäumen: Wurzel Teilbaum Informatik I – Repräsentation, Struktur und Interpretation … © Klaus Hinrichs 2-15 Bäume … • Definition: Ein Baum B besteht entweder aus – einem einzelnen Knoten w, oder – einem Knoten w und k & N Bäumen B1, B2, … Bk, deren Wurzeln direkt mit w verbunden sind. Der ausgezeichnete Knoten w heißt Wurzel des Baumes B. Die Bi heißen Teilbäume von B bzw. der Wurzel w. Die Wurzeln der Bi heißen Kinder von w, und w ist ihr Vater. • Schreibweise: (w) bzw. (w B1 B2 … Bk ) Wurzel w Teilbäume … B1 © Klaus Hinrichs B2 Bk Informatik I – Repräsentation, Struktur und Interpretation … 2-16 … Bäume • Sei NB die Menge der Knoten eines Baums B mit Wurzel w und Teilbäumen B1, B2, … Bk . Dann gilt: NB = {w} ( NB ( NB ( … ( NB 1 2 k • Ein Knoten eines Baumes B, der – keine Teilbäume hat, heißt Blatt von B; – Teilbäume hat, heißt innerer Knoten. • Ein Baum, bei dem jeder Knoten maximal n Teilbäume besitzt, heißt n-Baum. Wichtiger Spezialfall: Im 2-Baum bzw. Binärbaum hat jeder Knoten 0, 1 oder 2 Nachfolger, im 0-2-Baum hat jeder Knoten 0 oder 2 Nachfolger. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-17 Graphen • Definition: Ein gerichteter Graph ist ein Paar G = (V, E), wobei V eine endliche Menge von Knoten und E ) V " V eine binäre Relation, d.h. eine Menge von geordneten Paaren, ist. Jedes (geordnete) Paar (u, v) & E, das für u " v verschieden ist vom Paar (v, u), bezeichnet man als gerichtete Kante, die von u nach v verläuft. Für (u, v) schreibt man auch u ! v. In einem gerichteten Graphen sind Schleifen u ! u erlaubt. Ein ungerichteter Graph ist ein Paar G = (V, E), wobei V eine endliche Menge von Knoten ist und E aus ungeordneten Paaren von Knoten besteht. Jedes Element aus E ist eine Menge {u, v} mit u & V, v & V und u " v, die identisch ist mit der Menge {v, u}. Die Menge {u, v} wird als ungerichtete Kante bezeichnet, die u und v miteinander verbindet. In einem ungerichteten Graphen sind Schleifen {u, u} nicht erlaubt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-18 Ungerichtete und gerichtete Graphen • Beispiel für einen gerichteten Graphen: V = {1, 2, 3, 4, 5, 6, 7} E = {1 ! 4, 7 ! 1, 3 ! 4, 4 ! 7, 5 ! 2, 5 ! 6} 7 5 3 2 4 6 1 © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-19 Ungerichtete und gerichtete Graphen • Beispiel für einen ungerichteten Graphen: V = {1, 2, 3, 4, 5, 6, 7} E = {{1, 4}, {1, 7}, {3, 4}, {4, 7}, {2, 5}, {5, 6}} 7 5 3 2 4 6 1 © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-20 Eigenschaften von Graphen • In einem gerichteten Graphen verläuft ein Weg oder Pfad der Länge k von einem Knoten v zu einem Knoten w und ist gegeben durch eine Folge von k gerichteten Kanten v ! u1, u1 ! u2, …, uk–1 ! w. Ein solcher Weg heißt Zyklus, falls er wenigstens eine Kante enthält und v = w. • In einem ungerichteten Graphen verbindet ein Weg oder Pfad der Länge k einen Knoten v mit einem Knoten w und ist gegeben durch eine Folge von ungerichteten Kanten {v, u1 }, {u1, u2 }, … , {uk–1, w}. Ein solcher Weg heißt Zyklus, falls er wenigstens 3 Kanten enthält, v = w und u1, u2, … , uk–1, w paarweise verschieden sind. • Ein ungerichteter Graph heißt zusammenhängend, wenn je zwei Knoten durch einen Weg, d.h. durch eine Folge von Kanten, miteinander verbunden sind. • Ein Graph heißt azyklisch, wenn es keinen Zyklus gibt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-21 Bäume als Graphen • Alternative Definition eines Baumes: Ein Baum ist ein azyklischer, zusammenhängender, ungerichteter Graph mit einem als Wurzel ausgezeichneten Knoten. • Satz: Sei G = (V, E) ein ungerichteter Graph. Dann sind die folgenden Aussagen äquivalent: – G ist ein Baum. – Je zwei Knoten von G sind durch einen eindeutigen einfachen Pfad miteinander verbunden. – G ist zusammenhängend, nimmt man jedoch irgendeine Kante weg, so ist der restliche Graph nicht mehr zusammenhängend. – G ist zusammenhängend und |E| = |V| – 1. – G ist azyklisch und |E| = |V| – 1. – G ist azyklisch, jedoch entsteht ein Zyklus durch Hinzufügen irgendeiner Kante. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-22 Traversierung von Bäumen • Die Knoten eines Baumes (w L R) kann man, ausgehend von der Wurzel, in verschiedenen Reihenfolgen bei einer Baumtraversierung besuchen: – Präorder, Präfix oder WLR: Besuche zuerst die Wurzel w, dann den linken Teilbaum L, dann den rechten Teilbaum R. – Inorder, Infix oder LWR: Besuche zuerst den linken Teilbaum L, dann die Wurzel w, dann den rechten Teilbaum R. – Postorder, Postfix oder LRW: Besuche zuerst den linken Teilbaum L, dann den rechten Teilbaum R, dann die Wurzel w. • Beispiel: a b c d f © Klaus Hinrichs e g Präorder: a b c d f g e Inorder: bafdgce Postorder: b f g d e c a Informatik I – Repräsentation, Struktur und Interpretation … 2-23 Markierungen / Dewey-Notation • Definition: Ist M eine nicht-leere Menge, B ein Baum und m: NB ! M eine Abbildung, so heißt das Tripel (B, M, m) ein markierter Baum mit Markierungsmenge M und Markierungsfunktion m. • Dewey-Notation Jedem Knoten wird eine durch Punkte getrennte Folge von Zahlen zugeordnet, die einen Knoten eindeutig durch den Weg von der Wurzel zum Knoten selbst bestimmt: – Wurzel wird mit 0 bezeichnet. – In einem Knoten wird mit i notiert, in welchem Teilbaum Bi dieses Knotens der zu bezeichnende Knoten liegt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-24 Dewey-Notation • Beispiel: (0 (1 (1.1) (1.2)) (2 (2.1 (2.1.1) (2.1.2) (2.1.3))) (3)) 0 1 1.1 2 1.2 3 2.1 2.1.1 2.1.2 2.1.3 Informatik I – Repräsentation, Struktur und Interpretation … © Klaus Hinrichs 2-25 Weitere Eigenschaften von Bäumen • Unter der Höhe (alternativ: Tiefe) eines Baumes versteht man die Zahl der Kanten des längsten Pfades von der Wurzel bis zu einem Blatt: 1. Besteht B nur aus der Wurzel, so hat B die Höhe 0, d.h. height(B) = 0. 2. Hat B die Form (w B1 B2 … Bk ), so ist height( B) = 1+ max height( Bi ) 1!i !k • n-Baum: Höhe h steht in direkter Beziehung zur maximal möglichen Anzahl Blätter bzw. Knoten in NB. • Die maximale Knotenanzahl wird erreicht, wenn der n-Baum vollständig ist, d.h. alle inneren Knoten besitzen genau n Teilbäume. • Ein vollständiger n-Baum (n # 2) besitzt h h +1 ! ni = n i =0 "1 Knoten und nh Blätter. n "1 • Beispiel: vollständiger binärer Baum der Höhe 2 © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-26 Grundidee der strukturellen Induktion • Gegeben: Eine induktiv über ihren Aufbau definierte Menge von Objekten • Ziel: Beweis der Gültigkeit einer Aussage für alle Objekte der Menge • Vorgehen: – Verankerung: Zeige zuerst die Gültigkeit der Aussage für die Basisbausteine. – Induktionsschritt: Zeige für jede der Bildungsregeln, daß die Eigenschaft durch Zusammensetzen von Objekten, für die die Eigenschaft gilt (Induktionsannahme), nicht zerstört wird bzw. erhalten bleibt. • Da alle Objekte durch endliche Anwendung der Bildungsregeln entstehen, ist damit die Gültigkeit der Aussage für alle Objekte der Menge gezeigt. • Beispiel: Vollständige Induktion auf den natürlichen Zahlen N0 © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-27 Anwendung struktureller Induktion • Bisher angetroffene Definitionen, die die Anwendung struktureller Induktion ermöglichen: – Worte über einem endlichen Alphabet – Numerale über den Ziffern '0' bis '9' – einfache arithmetische Ausdrücke, die aus Numeralen und geklammerten Ausdrücken mit '+' und '!' bestehen. – Bäume • Satz: Ein Binärbaum (2-Baum) hat bei einer Höhe height(B) = h höchstens 2h + 1 – 1 Knoten, d.h. |NB| ! 2h + 1 – 1. Beweis: Die maximale Knotenzahl für NB wird für einen vollständigen Baum erreicht, da sonst Teilbäume und damit Knoten fehlen. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-28 Beweis durch strukturelle Induktion 1. Induktionsverankerung: Baum (w) mit NB = {w} hat Höhe 0: |NB| = 1 = 21 – 1 = 20 + 1 – 1 2. Induktionsschritt: Für alle Bildungsregeln, d.h. B = (w B1 B2 ), muß gezeigt werden, daß die Aussage unter Annahme ihrer Gültigkeit für B1 und B2 durch den Schritt des Zusammensetzens erhalten bleibt, also auch für B entsprechend gilt. Sei k = max(height(B1 ), height(B2 )) $ height((w B1 B2 )) = k + 1. Induktionsannahme $ |NB | ! 2k + 1 – 1 und |NB | ! 2k + 1 – 1 1 2 $ |NB| = 1 + |NB | + |NB | 1 k + 2 1 2 !1+ – 1 + 2k + 1 – 1 = 2 * 2k + 1 –1 = 2(k + 1) + 1 – 1, also das gewünschte Resultat. Aus der Kombination beider Aussagen für Basis und Bildungsschritt folgt dann die Gültigkeit der Behauptung für alle so konstruierbaren Bäume. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-29 Baumdarstellung von Ausdrücken … • Markierter Baum zu arithmetischem Ausdruck in verschiedenen Notationen: Infix: ((1 + 2) + (3 ! 4)) Postfix: 1 2 + 3 4 ! + Präfix: + + 1 2 ! 3 4 Scheme: (+ (+ 1 2) (! 3 4)) + ! + 1 2 3 4 Funktionen: +(+(1,2), !(3,4)) • Baum beschreibt Struktur eines Ausdrucks ohne Verwendung der Hilfssymbole { ' ', '(', ')' }. Hilfssymbole dienen in der textuellen Darstellung dazu, die Baumstruktur in der linear aufzuschreibenden textuellen Repräsentation eindeutig zu machen. • Baum ist eine kompaktere Beschreibung, die nur die wesentlichen Zusammenhänge wiedergibt. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-30 … Baumdarstellung von Ausdrücken • Definition: Sei MB2 die Menge aller Binärbäume mit Markierungsmenge M = NUM ( OP und EXP die Menge aller arithmetischen Ausdrücke. Dann definiert die Funktion baum: EXP ! MB2 zu jedem Ausdruck exp & EXP den entsprechenden Baum baum(exp) wie folgt: 1. Ist exp & NUM, dann ist baum(exp) = (w) mit Markierung m(w) = exp . 2. Hat exp die Form '(op exp1 exp2 )', dann ist baum(exp) = (w baum(exp1 ) baum(exp2 )) mit Markierung m(w) = op . • Definition einfacher arithmetischer Ausdrücke erlaubt nur Ausdrücke gemäß (1) und (2) $ baum ist für alle exp & EXP wohldefiniert. • Die Abbildung baum ist nicht surjektiv, denn z.B. der folgende Baum entspricht keinem gültigen arithmetischen Ausdruck: 1 ! © Klaus Hinrichs 2.2 (1(!)(5)) 5 Informatik I – Repräsentation, Struktur und Interpretation … 2-31 Interpretation und Auswertung einfacher arithmetischer Ausdrücke • Nächster Schritt: Zuordnung von Bedeutung zur Struktur durch Festlegung, wie syntaktisch korrekte Ausdrücke zu interpretieren sind • Interpretation von – Numeralen als natürliche Zahlen und – Operatorzeichen als Funktionen der Stelligkeit N0 " N0 ! N0 ermöglicht schrittweise Interpretation von Ausdrücken mit beliebig komplexer Struktur, die letztendlich alle jeweils mit einem Wert (vorerst nur aus N0) identifiziert werden können. • Den Vorgang der schrittweisen Interpretation (durch 'Ausrechnen') nennt man Auswertung des Ausdrucks. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-32 Interpretation der Numerale • Definition: Jedem num & NUM wird mittels der Funktion INUM : NUM ! N0 genau eine natürliche Zahl zugeordnet, die wie folgt definiert ist: 1. Für num & Z ist INUM ( '0' ) = 0 INUM ( '1' ) = 1 INUM ( '2' ) = 2 INUM ( '3' ) = 3 INUM ( '4' ) = 4 INUM ( '5' ) = 5 INUM ( '6' ) = 6 INUM ( '7' ) = 7 INUM ( '8' ) = 8 INUM ( '9' ) = 9 2. Hat num die Form num = num'.z mit z & Z, so ist INUM (num) = INUM (num'.z) = (INUM (num') * 10) + INUM (z) wobei * die Multiplikation und + die Addition in N0 bezeichnen. • Schrittweise Interpretation eines Numerals erfolgt über den Aufbau, d.h. die Konkatenation von Ziffern unter Berücksichtigung der Position (wie üblich im Dezimalsystem). © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-33 Interpretation eines Numerals • Beispiel: INUM ( '2104' ) = INUM ( '210' ) * 10 + INUM ( '4' ) = INUM ( '210' ) * 10 + 4 = (INUM ( '21' ) * 10 + INUM ( '0' )) * 10 + 4 = (INUM ( '21' ) * 10 + 0 ) * 10 + 4 = ( (INUM ( '2' ) * 10 + INUM ( '1' ) ) * 10 + 0 ) * 10 + 4 = ( (INUM ( '2' ) * 10 + 1 ) * 10 + 0 ) * 10 + 4 = ( (2 * 10 + 1 ) * 10 + 0 ) * 10 + 4 = ( (20 + 1 ) * 10 + 0 ) * 10 + 4 = ( 21 * 10 + 0 ) * 10 + 4 = ( 210 + 0 ) * 10 + 4 = 210 * 10 + 4 = 2100 + 4 = 2104 • Rein mechanische, schrittweise Anwendung der Definition bei der Interpretation eines Numerals © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-34 Interpretation von Operatorsymbolen • Definition: IOP ordnet jedem Operatorsymbol op & OP eine Interpretation als Funktion N0 " N0 ! N0 zu. Dabei ist IOP ( '+' ) = + : N0 " N0 ! N0 die Addition und IOP ( '!' ) = * : N 0 " N 0 ! N0 die Multiplikation auf natürlichen Zahlen. • Interpretation von Ausdrücken durch Interpretation ihrer Bestandteile: Anwendung der als Funktionen interpretierten Operatoren auf die jeweils sich durch Interpretation ergebenden Argumente • Auswertung (evaluation): Interpretation der Ausdrücke • Applikation (application): Anwendung der Funktionen © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-35 Interpretation von Ausdrücken • Definition: Jedem exp & EXP wird mittels der Funktion EVALEXP : EXP ! N0 genau eine natürliche Zahl zugeordnet. Dabei ist EVALEXP wie folgt definiert: 1. Ist exp & NUM ein Numeral, dann ist EVALEXP (exp) = INUM (exp). 2. Hat exp die Form (op exp1 exp2 ), dann ist EVALEXP (exp) definiert als die Anwendung von IOP (op) auf die Argumente EVALEXP (exp1 ) und EVALEXP (exp2 ). • Nur 2-stellige Operatoren: Schreibe (2) als IOP (op)(EVALEXP (exp1 ), EVALEXP (exp2 )) • Operatoren anderer Stelligkeit: Formuliere Anwendung als Funktion APPLY, die eine n-stellige Funktion f und n Werte arg1, … , argn als Argumente akzeptiert und daraus f (arg1, … , argn ) berechnet. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-36 Auswertung von Ausdrücken ... • Funktion IOP (op) kann nur angewendet werden, nachdem EVALEXP (exp1 ) und EVALEXP (exp2 ) berechnet sind, was zu jeweils einem Wert aus N0 führt $ Auswertungsreihenfolge der Form: erst die Teilausdrücke nach N0 auswerten und danach die Funktion anwenden. • Reihenfolge zwischen EVALEXP (exp1 ) und EVALEXP (exp2 ) ist beliebig, so daß i.a. mehrere mögliche Auswertereihenfolgen existieren und nur die Regel Argumente auswerten vor Funktionsapplikation verbindlich ist. Informatik I – Repräsentation, Struktur und Interpretation … © Klaus Hinrichs 2-37 ... Auswertung von Ausdrücken • Beispiel: Auswertung von '(! 2 (+ 3 4))' $ ! 2 + 3 $ ! 2 14 7 4 • Funktion IOP (op) kann erst dann angewendet werden, wenn die Teilbäume, die direkt mit op verbunden sind, nur noch mit einer Zahl aus N0 markiert sind, also schon vollständig ausgewertet wurden. © Klaus Hinrichs Informatik I – Repräsentation, Struktur und Interpretation … 2-38