Kapitel 2.1-2.2

Werbung
Ü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
Herunterladen