![Page 1: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/1.jpg)
1
Grundlagen der Programmierung 2
Haskell: Auswertung
Prof. Dr. Manfred Schmidt-Schauß
Sommersemester 2018
![Page 2: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/2.jpg)
Wieviel Vorfahren?
. . . . . . . . . . . . . . . . . . . . .
Oma-M Opa-M Oma-V Opa-V
Mutter
77hh
Vater
77gg
ich
33kk
Aufgabe: Wieviele Vorfahren hat ein Mensch nach nGenerationen?
anzahlInGeneration n = if n == 0 || n == 1 then 2
else 2 * anzahlInGeneration (n-1)
anzahlVorfahren n =
if n == 0 then 0
else anzahlInGeneration (n) + anzahlVorfahren (n-1)
Grundlagen der Programmierung 2 (Ausw-B) – 2/92 –
![Page 3: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/3.jpg)
Wieviel Vorfahren?
. . . . . . . . . . . . . . . . . . . . .
Oma-M Opa-M Oma-V Opa-V
Mutter
77hh
Vater
77gg
ich
33kk
Aufgabe: Wieviele Vorfahren hat ein Mensch nach nGenerationen?
anzahlInGeneration n = if n == 0 || n == 1 then 2
else 2 * anzahlInGeneration (n-1)
anzahlVorfahren n =
if n == 0 then 0
else anzahlInGeneration (n) + anzahlVorfahren (n-1)
Grundlagen der Programmierung 2 (Ausw-B) – 2/92 –
![Page 4: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/4.jpg)
Wieviel Vorfahren?
. . . . . . . . . . . . . . . . . . . . .
Oma-M Opa-M Oma-V Opa-V
Mutter
77hh
Vater
77gg
ich
33kk
Aufgabe: Wieviele Vorfahren hat ein Mensch nach nGenerationen?
anzahlInGeneration n = if n == 0 || n == 1 then 2
else 2 * anzahlInGeneration (n-1)
anzahlVorfahren n =
if n == 0 then 0
else anzahlInGeneration (n) + anzahlVorfahren (n-1)
Grundlagen der Programmierung 2 (Ausw-B) – 2/92 –
![Page 5: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/5.jpg)
Wieviel Vorfahren?
. . . . . . . . . . . . . . . . . . . . .
Oma-M Opa-M Oma-V Opa-V
Mutter
77hh
Vater
77gg
ich
33kk
Aufgabe: Wieviele Vorfahren hat ein Mensch nach nGenerationen?
anzahlInGeneration n = if n == 0 || n == 1 then 2
else 2 * anzahlInGeneration (n-1)
anzahlVorfahren n =
if n == 0 then 0
else anzahlInGeneration (n) + anzahlVorfahren (n-1)
Grundlagen der Programmierung 2 (Ausw-B) – 2/92 –
![Page 6: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/6.jpg)
Wieviel Vorfahren?
. . . . . . . . . . . . . . . . . . . . .
Oma-M Opa-M Oma-V Opa-V
Mutter
77hh
Vater
77gg
ich
33kk
Aufgabe: Wieviele Vorfahren hat ein Mensch nach nGenerationen?
anzahlInGeneration n = if n == 0 || n == 1 then 2
else 2 * anzahlInGeneration (n-1)
anzahlVorfahren n =
if n == 0 then 0
else anzahlInGeneration (n) + anzahlVorfahren (n-1)
Grundlagen der Programmierung 2 (Ausw-B) – 2/92 –
![Page 7: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/7.jpg)
Aufrufhierarchie und Rekursive Definitionen
Jetzt die Definition dazu:
f, g, fi seien Haskell-definierte Funktionen.
f referenziert g direkt, wenn g im Rumpf von f vorkommt.
f referenziert g wennf referenziert direkt g,oder es gibt Funktionen f1, . . . , fn,so dass gilt: f referenziert direkt f1,f1 referenziert direkt f2, . . . ,fn referenziert direkt g.
f ist direkt rekursiv, wenn f sich selbst direkt referenziert.f ist rekursiv, wenn f sich selbst referenziert.
Verschrankte Rekursion: wenn f die Funktion g referenziertund g die Funktion f .(auch fur allgemeinere Falle)
Grundlagen der Programmierung 2 (Ausw-B) – 3/92 –
![Page 8: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/8.jpg)
Beispiel: Aufrufhierarchie
quadrat x = x*x
quadratsumme x y = (quadrat x) + (quadrat y)
quadratsumme referenziert direkt die Funktionen quadrat unddie (eingebaute) Funktion +
quadratsumme referenziert die Funktionen {quadrat, ∗,+}
Die Funktion quadratsumme ist somit nicht rekursiv
Grundlagen der Programmierung 2 (Ausw-B) – 4/92 –
![Page 9: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/9.jpg)
Beispiel: Fakultat
0! := 1n! := n ∗ (n− 1)! wenn n > 0
Anwendung: n! ist die Anzahl aller Permutationender Elemente einer n-elementigen Menge.
Beispiel:
Menge mit 3 Elementen {A,B,C}:6 Permutationen: ABC,ACB,BAC,BCA,CAB,CBA3! = 3 ∗ 2! = 3 ∗ 2 ∗ 1! = 3 ∗ 2 ∗ 1 ∗ 0! = 3 ∗ 2 ∗ 1 ∗ 1 = 6
Grundlagen der Programmierung 2 (Ausw-B) – 5/92 –
![Page 10: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/10.jpg)
Beispiel: Fakultat
rekursive Definition:
fakultaet:: Integer -> Integer
fakultaet x = if x <= 0 then 1
else x*(fakultaet (x-1))
Die Funktion fakultaet ist rekursiv, da sie im Rumpf der Definitionsich selbst referenziert
Grundlagen der Programmierung 2 (Ausw-B) – 6/92 –
![Page 11: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/11.jpg)
Entwurf rekursiver Funktionen
zwei Falle sind beim Entwurf rekursiver Funktionen zu beachten
der Basisfall: keine weitere Rekursionder Rekursionsfall: neuer rekursiver Aufruf
Terminierung der Aufrufe fur alle Eingabefalle sollte man prufen.. . . Naturlich auch Korrektheit.
Grundlagen der Programmierung 2 (Ausw-B) – 7/92 –
![Page 12: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/12.jpg)
Entwurf rekursiver Funktionen
Am Beispiel fakultaet:
der Basisfall: Ergebnis: 0 wenn das Argument x ≤ 1 ist.der Rekursionsfall: Ergebnis: x*(fakultaet (x-1)), wenn x > 1 ist.
Terminierung:
• Argumente werden mit jedem rekursiven Aufruf kleinerfakultaet x ruft fakultaet (x-1) auf fur x ≥ 1.
• Der Basisfall hat das kleinste Argument
*Main> fakultaet 3 ←↩6
*Main> fakultaet 40 ←↩815915283247897734345611269596115894272000000000
Grundlagen der Programmierung 2 (Ausw-B) – 8/92 –
![Page 13: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/13.jpg)
Eine Definition mit Lucke
fakultaet_nt:: Integer -> Integer
fakultaet_nt x = if x == 0 then 1
else x*(fakultaet_nt (x-1))
Diese Funktion terminiert nicht bei negativen Eingaben:fakultaet_nt (-5) ruft fakultaet_nt (-6) auf usw.
Grundlagen der Programmierung 2 (Ausw-B) – 9/92 –
![Page 14: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/14.jpg)
Beispiel: großter gemeinsamer Teiler: ggt
ggt:: Integer -> Integer -> Integer
ggt a b = if b == 0
then a
else ggt b (rem a b)
Annahme: a,b ≥ 0
Basisfall: ?
b = 0
Rekursionsfall: ?
b > 0
Terminierung: ?
b > (a ‘rem‘ b) ≥ 0;also . . .
Grundlagen der Programmierung 2 (Ausw-B) – 10/92 –
![Page 15: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/15.jpg)
Beispiel: großter gemeinsamer Teiler: ggt
ggt:: Integer -> Integer -> Integer
ggt a b = if b == 0
then a
else ggt b (rem a b)
Annahme: a,b ≥ 0
Basisfall:
?
b = 0Rekursionsfall: ?
b > 0
Terminierung: ?
b > (a ‘rem‘ b) ≥ 0;also . . .
Grundlagen der Programmierung 2 (Ausw-B) – 10/92 –
![Page 16: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/16.jpg)
Beispiel: großter gemeinsamer Teiler: ggt
ggt:: Integer -> Integer -> Integer
ggt a b = if b == 0
then a
else ggt b (rem a b)
Annahme: a,b ≥ 0
Basisfall:
?
b = 0Rekursionsfall:
?
b > 0Terminierung: ?
b > (a ‘rem‘ b) ≥ 0;also . . .
Grundlagen der Programmierung 2 (Ausw-B) – 10/92 –
![Page 17: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/17.jpg)
Beispiel: großter gemeinsamer Teiler: ggt
ggt:: Integer -> Integer -> Integer
ggt a b = if b == 0
then a
else ggt b (rem a b)
Annahme: a,b ≥ 0
Basisfall:
?
b = 0Rekursionsfall:
?
b > 0Terminierung:
?
b > (a ‘rem‘ b) ≥ 0;also . . .
Grundlagen der Programmierung 2 (Ausw-B) – 10/92 –
![Page 18: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/18.jpg)
Auswertung von Haskell-Programmen
Auswertung von
Haskell-Programmen
Grundlagen der Programmierung 2 (Ausw-B) – 11/92 –
![Page 19: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/19.jpg)
Auswertung von Haskell-Programmen
operationale Semantik von Haskell:
Transformationen eines Ausdrucks(bzw. des main-Ausdrucks des Programms)
bis ein einfacher Ausdruck erreicht ist.
⇒ Transformations-Semantik
Ausdrucke sind implizit durch Syntaxbaume eindeutig dargestellt.
Grundlagen der Programmierung 2 (Ausw-B) – 12/92 –
![Page 20: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/20.jpg)
Syntaxbaum: Beispiele
if x <= 0 then 1 else x*(quadrat (x-1))
ifThenElsett �� **<=
|| !!
1 ∗�� %%
x 0 x quadrat��−
xx &&x 1
x*(quadrat (x-1))
∗�� $$
x quadrat
��−
zz $$x 1
Grundlagen der Programmierung 2 (Ausw-B) – 13/92 –
![Page 21: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/21.jpg)
Baum
Baum Baum (auf dem Kopf stehend)
• •
•
OO
• • •
__
•
__ ??
•
__ ??
•
gg 77
•
OO
•��•
ww ''•�� ��
•�� ��
•��
• • •��
• •
Grundlagen der Programmierung 2 (Ausw-B) – 14/92 –
![Page 22: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/22.jpg)
Baum im Informatiker-Park Porto
Grundlagen der Programmierung 2 (Ausw-B) – 15/92 –
![Page 23: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/23.jpg)
Syntaxbaum: Beispiele
Zwei Syntaxbaume zum Ausdruck 1-2-3:
−
�� ��1 −
~~ ��2 3
(1− (2− 3))
−�� ��
−
��
3
1 2
((1− 2)− 3)
Nur einer passt zum Ausdruck 1-2-3 in Haskell.
Grundlagen der Programmierung 2 (Ausw-B) – 16/92 –
![Page 24: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/24.jpg)
Auswertung von Haskell-Programmen
Eindeutige Festlegung der Ausfuhrung durch eine Strategie:zwei Moglichkeiten (u.a.):
normale Reihenfolge der Auswertung,(Haskell benutzt eine verbesserte Variante)
applikative Reihenfolge der Auswertung,(z.B. in Python, ML, OCaml, Lisp)
Grundlagen der Programmierung 2 (Ausw-B) – 17/92 –
![Page 25: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/25.jpg)
Auswertung von Haskell-Programmen
Prinzip der Berechnung in Haskell:
Auswertung = Folge von Transformationen eines Ausdrucks• in normaler Reihenfolge (Normalordnung)• unter Benutzung der Funktions-Definitionen
bis ein Basiswert erreicht ist
Fehler-Moglichkeiten fur Transformationsfolgen:
• Transformation bleibt stecken, aber kein Basiswert wird erreicht(wird verhindert durch Typisierung)
• Transformationsfolge terminiert nicht
Grundlagen der Programmierung 2 (Ausw-B) – 18/92 –
![Page 26: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/26.jpg)
Definitionseinsetzung (δ-Reduktion)
f x1 . . . xn = Rf sei die Haskell-Definition von f
Auswertung:
(f t1 . . . tn) → (Rf [t1/x1, . . . tn/xn])
paralleles (unabhangiges) Ersetzenvon xi durch die Argumente ti fur i = 1, . . . , n
Beispiel
quadrat x = x*x Rquadrat ist hier: x*x
quadrat 11
→ x*x[11/x] = 11*11
Grundlagen der Programmierung 2 (Ausw-B) – 19/92 –
![Page 27: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/27.jpg)
Definitionseinsetzung (δ-Reduktion)
f x1 . . . xn = Rf sei die Haskell-Definition von f
Auswertung:
(f t1 . . . tn) → (Rf [t1/x1, . . . tn/xn])
paralleles (unabhangiges) Ersetzenvon xi durch die Argumente ti fur i = 1, . . . , n
Beispiel
quadrat x = x*x Rquadrat ist hier: x*x
quadrat 11
→ x*x[11/x] = 11*11
Grundlagen der Programmierung 2 (Ausw-B) – 19/92 –
![Page 28: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/28.jpg)
Definitionseinsetzung (δ-Reduktion)
f x1 . . . xn = Rf sei die Haskell-Definition von f
Auswertung:
(f t1 . . . tn) → (Rf [t1/x1, . . . tn/xn])
paralleles (unabhangiges) Ersetzenvon xi durch die Argumente ti fur i = 1, . . . , n
Beispiel
quadrat x = x*x Rquadrat ist hier: x*x
quadrat 11 → x*x[11/x] = 11*11
Grundlagen der Programmierung 2 (Ausw-B) – 19/92 –
![Page 29: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/29.jpg)
Arithmetische Auswertungen
Zahl + Zahl Ergebnis durch”Ausrechnen“
mittels vorprogrammierter OperationenZahl ∗ Zahl genauso. . .
Beachte: Wenn s op t arithmetisch ausgewertet werden soll,dann mussen zuerst die Ausdrucke s und tzu Zahlen ausgewertet werden!
Grundlagen der Programmierung 2 (Ausw-B) – 20/92 –
![Page 30: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/30.jpg)
Beispiel:
Programm:
main = quadrat 5
quadrat x = x*x
Auswertung als Folge von Transformationen:main
→ (Definitions-Einsetzung)quadrat 5
→ (Definitions-Einsetzung)5 * 5
→ (arithmetische Auswertung)25
Grundlagen der Programmierung 2 (Ausw-B) – 21/92 –
![Page 31: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/31.jpg)
Beispiel:
Programm:
main = quadrat 5
quadrat x = x*x
Auswertung als Folge von Transformationen:main
→ (Definitions-Einsetzung)quadrat 5
→ (Definitions-Einsetzung)5 * 5
→ (arithmetische Auswertung)25
Grundlagen der Programmierung 2 (Ausw-B) – 21/92 –
![Page 32: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/32.jpg)
Beispiel:
Programm:
main = quadrat 5
quadrat x = x*x
Auswertung als Folge von Transformationen:main
→ (Definitions-Einsetzung)quadrat 5
→ (Definitions-Einsetzung)5 * 5
→ (arithmetische Auswertung)25
Grundlagen der Programmierung 2 (Ausw-B) – 21/92 –
![Page 33: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/33.jpg)
Beispiel:
Programm:
main = quadrat 5
quadrat x = x*x
Auswertung als Folge von Transformationen:main
→ (Definitions-Einsetzung)quadrat 5
→ (Definitions-Einsetzung)5 * 5
→ (arithmetische Auswertung)25
Grundlagen der Programmierung 2 (Ausw-B) – 21/92 –
![Page 34: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/34.jpg)
Boolesche Auswertungen
UND ODER NICHTv && w v || w not w
Skonnte man so definieren:
x && y = if x then y else False
x || y = if x then True else y
not x = if x then False else True
Grundlagen der Programmierung 2 (Ausw-B) – 22/92 –
![Page 35: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/35.jpg)
Auswertung der Fallunterscheidung
Fallunterscheidung (if-Reduktion)Definition:
(if True then e1 else e2) → e1(if False then e1 else e2) → e2
Beachte(if b then e1 else e2)-Auswertung
erfordert automatisch, dass zuerst b ausgewertet werden muss.
Grundlagen der Programmierung 2 (Ausw-B) – 23/92 –
![Page 36: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/36.jpg)
Transformationen, Reduktionen
Wir nennen eine Transformation auch Reduktionund eine Folge von Programmtransformationen auchReduktionsfolge (oder Auswertung).
Beachte: Reduktionen / Transformationen sind zunachst uberall imAusdruck erlaubt.Erst eine Auswertungs-Strategie macht die Auswertung eindeutig.
Grundlagen der Programmierung 2 (Ausw-B) – 24/92 –
![Page 37: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/37.jpg)
Transformationen, Reduktionen
Motivation fur diese Transformationssemantik:
• eindeutige Festlegung der (Haskell-)Auswertung• Umgang mit nichtterminierenden Argumenten• Unendliche Listen• diese kommt ohne Ubersetzung/Compilation aus
Motivation fur Normalordnung (s.u.):• korrekte Programmtransformationen• einfache Programm-Logik• Hohe Modularitat wird ermoglicht• Implizite Parallelitat wird unterstutzt
Grundlagen der Programmierung 2 (Ausw-B) – 25/92 –
![Page 38: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/38.jpg)
Transformationen, Reduktionen
Motivation fur diese Transformationssemantik:
• eindeutige Festlegung der (Haskell-)Auswertung• Umgang mit nichtterminierenden Argumenten• Unendliche Listen• diese kommt ohne Ubersetzung/Compilation aus
Motivation fur Normalordnung (s.u.):• korrekte Programmtransformationen• einfache Programm-Logik• Hohe Modularitat wird ermoglicht• Implizite Parallelitat wird unterstutzt
Grundlagen der Programmierung 2 (Ausw-B) – 25/92 –
![Page 39: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/39.jpg)
Beispiel
x && y = if x then y else False
x || y = if x then True else y
bot = bot
Beispiel-Auswertungen dazuTrue && True → if True then True else False → True
True && False → if True then False else False → False
True || True → if True then True else True → True
True || False → if True then True else False → True
True && bot → if True then bot else False → bot → bot . . .True || bot → if True then True else bot → True
bot terminiert nicht bei Auswertung!
Grundlagen der Programmierung 2 (Ausw-B) – 26/92 –
![Page 40: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/40.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)
D−→ (4 + 5) ∗ (4 + 5)A−→ 9 ∗ (4 + 5)
A−→ 9 ∗ 9A−→ 81
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 41: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/41.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)
D−→ (4 + 5) ∗ (4 + 5)A−→ 9 ∗ (4 + 5)
A−→ 9 ∗ 9A−→ 81
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 42: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/42.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 43: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/43.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 44: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/44.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)
A−→ 9 ∗ 9A−→ 81
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 45: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/45.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)
A−→ 9 ∗ 9A−→ 81
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 46: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/46.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 47: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/47.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 48: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/48.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 49: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/49.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5)
→ (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 50: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/50.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5)
→ (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 51: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/51.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5)
→ (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 52: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/52.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5)
→ (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 53: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/53.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9
→ 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 54: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/54.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9
→ 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 55: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/55.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9
→ 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 56: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/56.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9
→ 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 57: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/57.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 58: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/58.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5)
→ quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 59: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/59.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5)
→ quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 60: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/60.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9
→ 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 61: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/61.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9
→ 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 62: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/62.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9
→ 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 63: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/63.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9
→ 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 64: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/64.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 65: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/65.jpg)
Transformationsmoglichkeiten
3 verschiedene Auswertungen fur quadrat (4+5) :
quadrat(4 + 5)D−→ (4 + 5) ∗ (4 + 5)
A−→ 9 ∗ (4 + 5)A−→ 9 ∗ 9
A−→ 81quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → (4 + 5) ∗ 9 → 9 ∗ 9 → 81quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
Beobachtungen:• Das Ergebnis ist gleich• Die Anzahl der Reduktionen kann verschieden sein
Grundlagen der Programmierung 2 (Ausw-B) – 27/92 –
![Page 66: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/66.jpg)
Reduktionsstrategien
Wichtige Reduktionsstrategien
Applikative Reihenfolge:Argumentauswertung vor Definitionseinsetzung
Normale Reihenfolge:Definitionseinsetzung vor Argumentauswertung
Verzogerte Reihenfolge:Normale Reihenfolge mit Sharing
(informell)
Grundlagen der Programmierung 2 (Ausw-B) – 28/92 –
![Page 67: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/67.jpg)
Eindeutigkeit der Ergebnisse
SatzSei t ein Ausdruck in Haskell.Wenn
t∗,appl .R.−−−−−→ a,
t∗,norm.R.−−−−−−→ b
t∗,verz.R.−−−−−→ c
und a, b, c sind Basiswerte (d.h. Integer, Zahlen,. . . , BoolescheWerte).Dann gilt a = b = c.
t∗,...−−→ a bedeutet: in 0,1,2, 3,.. Reduktionschritten.
Grundlagen der Programmierung 2 (Ausw-B) – 29/92 –
![Page 68: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/68.jpg)
Applikative Reihenfolge der Auswertung
• Argumentauswertung vor Definitionseinsetzungwird in den meisten Programmiersprachen benutztz.B. in Python, C, ML, ....
• wird nicht in Haskell verwendet.• Diskussion der Vor- / Nachteile spater . . .
Grundlagen der Programmierung 2 (Ausw-B) – 30/92 –
![Page 69: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/69.jpg)
Applikative Reihenfolge der Auswertung
Werte den Ausdruck t applikativ aus! (dadurch wird dieAuswertung eindeutig)• t ist Basiswert. fertig.• t ≡ s1 t1,
Wenn s1 kein Funktionsname und keine Anwendung,dann werte s1 applikativ aus (rekursiv)
• t ≡ f t1 . . . tn.Wenn ar(f) ≤ n, dann (rekursiv) applikativ auswerten:
ti, 1 ≤ i ≤ ar(f) von links nach rechts.Wenn ar(f) ≤ n und alle ti Basiswerte, dann Definitionseinsetzung (δ-Reduktion).Wenn n < ar(f), dann fertig: keine Reduktion.
• t ≡ if b then e1 else e2.Wenn b Basiswert, dann if-ReduktionWenn b kein Basiswert, dann werte b applikativ aus (rekursiv)
Grundlagen der Programmierung 2 (Ausw-B) – 31/92 –
![Page 70: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/70.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 71: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/71.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 72: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/72.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 73: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/73.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 74: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/74.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 75: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/75.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 76: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/76.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 77: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/77.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 78: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/78.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 79: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/79.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 80: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/80.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 81: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/81.jpg)
Beispiel: applikative Auswertung
Wo im Ausdruck applikativ auswerten?
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
quadrat (quadrat ((quadrat 2) + (quadrat 3)))
Grundlagen der Programmierung 2 (Ausw-B) – 32/92 –
![Page 82: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/82.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 83: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/83.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5)
→ quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 84: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/84.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5)
→ quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 85: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/85.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9
→ 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 86: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/86.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9
→ 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 87: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/87.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9
→ 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 88: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/88.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9
→ 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 89: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/89.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 90: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/90.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3))
→ quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 91: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/91.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3))
→ quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 92: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/92.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5)
→quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 93: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/93.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5)
→quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 94: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/94.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25
→ 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 95: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/95.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25
→ 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 96: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/96.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25
→ 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 97: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/97.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25
→ 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 98: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/98.jpg)
Beispiel fur applikative Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen (applikative Reihenfolge)
quadrat(4 + 5) → quadrat 9 → 9 ∗ 9 → 81
quadrat(quadrat(2 + 3)) → quadrat(quadrat 5) →quadrat 25 → 25 ∗ 25 → 625
Grundlagen der Programmierung 2 (Ausw-B) – 33/92 –
![Page 99: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/99.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 100: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/100.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 101: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/101.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 102: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/102.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))
if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 103: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/103.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))
if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 104: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/104.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))
4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 105: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/105.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))
4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 106: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/106.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))
4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 107: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/107.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))
4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 108: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/108.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)
4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 109: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/109.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)
4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 110: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/110.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 111: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/111.jpg)
fakultaet: applikative Reihenfolge
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
applikativ
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet (4-1))if False then 1 else 4*(fakultaet (4-1))4*(fakultaet (4-1))4*(fakultaet 3)4*(if 3 <= 1 then 1 else 3*(fakultaet (3-1)))
Grundlagen der Programmierung 2 (Ausw-B) – 34/92 –
![Page 112: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/112.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))
4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 113: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/113.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))
4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 114: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/114.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))
4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 115: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/115.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))
4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 116: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/116.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))
4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 117: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/117.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))
4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 118: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/118.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))
4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 119: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/119.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))
4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 120: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/120.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))
4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 121: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/121.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))
4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 122: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/122.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))
4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 123: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/123.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))
4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 124: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/124.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))
4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 125: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/125.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))
4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 126: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/126.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))
4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 127: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/127.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 128: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/128.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 129: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/129.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 130: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/130.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 131: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/131.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))
4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 132: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/132.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))
4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 133: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/133.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)
(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 134: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/134.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)
(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 135: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/135.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)
2418 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 136: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/136.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)
2418 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 137: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/137.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 138: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/138.jpg)
fakultaet: applikative Reihenfolge (2)
4*(if False then 1 else 3*(fakultaet (3-1)))4*(3*(fakultaet (3-1)))4*(3* (fakultaet 2))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet (2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet (2-1))))4*(3*(2*(fakultaet 1))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)(4*6)24
18 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 35/92 –
![Page 139: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/139.jpg)
Beispiel: applikative Reihenfolge der Auswertung
main = const 5 (fakultaet 4)
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
const x y = x
main1−→ const 5 (fakultaet 4)
18−→ const 5 241−→ 5
Anzahl der Reduktionen: 20
Grundlagen der Programmierung 2 (Ausw-B) – 36/92 –
![Page 140: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/140.jpg)
Normale Reihenfolge der Auswertung
• Definitionseinsetzung vor Argumentauswertung• wird in Haskell benutzt
Grundlagen der Programmierung 2 (Ausw-B) – 37/92 –
![Page 141: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/141.jpg)
Beschreibung: normale Reihenfolgewerte t in normaler Reihenfolge aus. Falle:• t ist Basiswert. fertig.• t ≡ s1 t1,
Wenn s1 kein Funktionsname und keine Anwendung.Dann normale R. auf s1
• t ≡ f t1 . . . tn und f keine eingebaute Funktion,Wenn ar(f) ≤ n, dann Definitionseinsetzung auf f t1 . . . tar(f).Wenn ar(f) > n: keine Reduktion.
• t ≡ f t1 . . . tn und f ist eingebaute FunktionWenn ar(f) ≤ n und Argumente von f keine Basiswerte,dann normale R. auf ar(f) Argumente von links nach rechts.Wenn ar(f) ≤ n, und ar(f) Argumente von f sind Basiswerte,dann eingebaute Funktion aufrufen.Wenn ar(f) > n: keine Reduktion.
• t ≡ if b then e1 else e2.Wenn b Basiswert, dann if-ReduktionWenn b kein Basiswert, dann normale R. auf b
Grundlagen der Programmierung 2 (Ausw-B) – 38/92 –
![Page 142: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/142.jpg)
Beispiel: normale Reihenfolge-Auswertung
Wo im Ausdruck auswerten (entsprechend normaler Reihenfolge) ?
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
Grundlagen der Programmierung 2 (Ausw-B) – 39/92 –
![Page 143: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/143.jpg)
Beispiel: normale Reihenfolge-Auswertung
Wo im Ausdruck auswerten (entsprechend normaler Reihenfolge) ?
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
Grundlagen der Programmierung 2 (Ausw-B) – 39/92 –
![Page 144: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/144.jpg)
Beispiel: normale Reihenfolge-Auswertung
Wo im Ausdruck auswerten (entsprechend normaler Reihenfolge) ?
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
Grundlagen der Programmierung 2 (Ausw-B) – 39/92 –
![Page 145: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/145.jpg)
Beispiel: normale Reihenfolge-Auswertung
Wo im Ausdruck auswerten (entsprechend normaler Reihenfolge) ?
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
Grundlagen der Programmierung 2 (Ausw-B) – 39/92 –
![Page 146: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/146.jpg)
Beispiel: normale Reihenfolge-Auswertung
Wo im Ausdruck auswerten (entsprechend normaler Reihenfolge) ?
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
(quadrat (2 + 3)) ∗ (quadrat (2 + 3))
Grundlagen der Programmierung 2 (Ausw-B) – 39/92 –
![Page 147: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/147.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungen
quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 148: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/148.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5)
→ (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 149: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/149.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5)
→ 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 150: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/150.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5)
→ 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 151: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/151.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5)
→ 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 152: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/152.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5)
→ 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 153: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/153.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9
→ 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 154: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/154.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9
→ 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 155: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/155.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 156: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/156.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3))
→(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 157: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/157.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3))
→(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 158: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/158.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3))
→((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 159: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/159.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3))
→((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 160: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/160.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3))
→(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 161: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/161.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3))
→(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 162: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/162.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3))
→(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 163: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/163.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3))
→(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 164: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/164.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3))
→25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 165: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/165.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3))
→25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 166: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/166.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3))
→25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 167: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/167.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3))
→25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 168: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/168.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3))
→25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 169: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/169.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3))
→25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 170: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/170.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3))
→25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 171: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/171.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3))
→25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 172: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/172.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5)
→25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 173: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/173.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5)
→25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 174: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/174.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25
→625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 175: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/175.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25
→625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 176: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/176.jpg)
Beispiel fur normale Reihenfolge
quadrat x = x*x
2 Beispiel-Auswertungenquadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 81
quadrat (quadrat(2 + 3)) →(quadrat(2 + 3)) ∗ (quadrat(2 + 3)) →((2 + 3) ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ (2 + 3)) ∗ (quadrat(2 + 3)) →(5 ∗ 5) ∗ (quadrat(2 + 3)) →25 ∗ (quadrat(2 + 3)) →25 ∗ ((2 + 3) ∗ (2 + 3)) →25 ∗ (5 ∗ (2 + 3)) →25 ∗ (5 ∗ 5) →25 ∗ 25 →625
Grundlagen der Programmierung 2 (Ausw-B) – 40/92 –
![Page 177: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/177.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 178: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/178.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 179: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/179.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 180: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/180.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))
if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 181: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/181.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))
if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 182: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/182.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))
4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 183: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/183.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))
4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 184: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/184.jpg)
Beispiel: Auswertung
main = fakultaet 4
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Auswertung (in normaler Reihenfolge:)fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
Grundlagen der Programmierung 2 (Ausw-B) – 41/92 –
![Page 185: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/185.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))
4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 186: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/186.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))
4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 187: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/187.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 188: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/188.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 189: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/189.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 190: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/190.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 191: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/191.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))
4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 192: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/192.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))
4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 193: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/193.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))
4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 194: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/194.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))
4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 195: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/195.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))
4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 196: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/196.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))
4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 197: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/197.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))
4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 198: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/198.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))
4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 199: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/199.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 200: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/200.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 201: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/201.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 202: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/202.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 203: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/203.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 204: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/204.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 205: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/205.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 206: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/206.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))
4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 207: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/207.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 208: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/208.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))
4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 209: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/209.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 210: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/210.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 211: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/211.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 212: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/212.jpg)
Beispiel: normale Reihenfolge der Auswertung (2)
4*(fakultaet(4-1)))4*(if (4-1)<= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if False then 1 else (4-1)*(fakultaet((4-1)-1)))4*((4-1)*(fakultaet((4-1)-1)))4*(3*(fakultaet((4-1)-1)))4*(3*(if ((4-1)-1) <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1)))))4*(3*(if(3-1)<= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if 2 <= 1 then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(if False then 1 else ((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*(((4-1)-1)*(fakultaet(((4-1)-1)-1))))4*(3*((3-1)*(fakultaet(((4-1)-1)-1))))4*(3*(2*(fakultaet(((4-1)-1)-1))))4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
Grundlagen der Programmierung 2 (Ausw-B) – 42/92 –
![Page 213: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/213.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 214: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/214.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))
4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 215: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/215.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))
4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 216: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/216.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))
4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 217: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/217.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))
4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 218: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/218.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))
4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 219: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/219.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))
4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 220: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/220.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))
4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 221: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/221.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))
4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 222: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/222.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))
4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 223: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/223.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))
4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 224: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/224.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))
4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 225: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/225.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)
4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 226: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/226.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)
4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 227: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/227.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*6
24Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 228: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/228.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*6
24Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 229: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/229.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624
Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 230: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/230.jpg)
Beispiel: normale Reihenfolge der Auswertung (4)
4*(3*(2*(if (((4-1)-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if ((3-1)-1) <= 1 then 1 . . . )))4*(3*(2*(if 2-1 <= 1 then 1 . . . )))4*(3*(2*(if 1 <= 1 then 1 . . . )))4*(3*(2*(if True then 1 . . . )))4*(3*(2*1))4*(3*2)4*624Das sind 24 Auswertungsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 43/92 –
![Page 231: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/231.jpg)
Beispiel: normale Reihenfolge der Auswertung
main = const 5 (fakultaet 4)
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
const x y = x
main1−→ const 5 (fakultaet 4)
1−→ 5
Anzahl der Reduktionen: 2
(20 bei applikativer Reihenfolge)
Grundlagen der Programmierung 2 (Ausw-B) – 44/92 –
![Page 232: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/232.jpg)
Beispiel fur verschiedene Reduktionsstrategien
quadrat x = x*x
3 Auswertungen fur quadrat (4+5) :
1 quadrat(4 + 5)→ (4 + 5)∗(4+5)→ 9∗(4 + 5)→ 9 ∗ 9→ 81normale Reihenfolge der Auswertung
2 quadrat(4 + 5)→ (4+5)∗(4 + 5)→ (4 + 5)∗9→ 9 ∗ 9→ 81Irgendeine Auswertung
3 quadrat(4 + 5)→ (quadrat 9)→ 9 ∗ 9→ 81applikative Reihenfolge der Auswertung
Grundlagen der Programmierung 2 (Ausw-B) – 45/92 –
![Page 233: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/233.jpg)
Verzogerte Reihenfolge der Auswertung
Definition verzogerte Reihenfolge der Auswertung (lazy reduction):• wie normale Reihenfolge• aber: gerichteter Graph statt Syntax-Baum• Vermeidung von unnotiger Doppelauswertung
durch gemeinsame Unterausdrucke (Sharing)• Die gemeinsamen (d.h. shared) Unterausdrucke sind durch
die Funktionsrumpfe festgelegt.
Grundlagen der Programmierung 2 (Ausw-B) – 46/92 –
![Page 234: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/234.jpg)
Beispiele
4 Reduktionen: (normale Reihenfolge)quadrat(4 + 5)→ (4 + 5)∗ (4 + 5)→ 9∗ (4 + 5)→ 9∗9→ 81
3 Reduktionen (verzogerte Reihenfolge)quadrat(4 + 5)→ (4 + 5)(1) ∗ (4 + 5)(1) → 9 ∗ 9→ 81
Grundlagen der Programmierung 2 (Ausw-B) – 47/92 –
![Page 235: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/235.jpg)
Beispiel in gerichteter-Graph-DarstellungNormale Reihenfolge:
quadrat��+
|| ""4 5
→
∗{{ ##
+
�� ��+
�� ��4 5 4 5
→
∗�� ""
9 +
�� ��4 5
→∗�� ��
9 9→ 81
VerzogerteReihenfolge:
quadrat��
+
{{ ##4 5
→
∗}}""
+�� ��
4 5
→∗{{##
9→ 81
ApplikativeReihenfolge:
quadrat��
+
{{ ##4 5
→quadrat��9
→∗�� ��
9 9→ 81
Grundlagen der Programmierung 2 (Ausw-B) – 48/92 –
![Page 236: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/236.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 237: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/237.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 238: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/238.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4
if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 239: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/239.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))
if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 240: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/240.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))
if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 241: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/241.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))
4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 242: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/242.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))
4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 243: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/243.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 244: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/244.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))
4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 245: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/245.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 246: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/246.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))
4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 247: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/247.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 248: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/248.jpg)
Verzogerte Auswertung: Beispiel
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Rot: die Stelle, die reduziert wirdGrun: die Stelle, die identisch mit der roten ist
fakultaet 4if 4 <= 1 then 1 else 4*(fakultaet(4-1))if False then 1 else 4*(fakultaet(4-1))4*(fakultaet(4-1))4*(if (4-1) <= 1 then 1 else (4-1)*(fakultaet((4-1)-1)))4*(if 3 <= 1 then 1 else 3 * (fakultaet( 3 -1)))
Grundlagen der Programmierung 2 (Ausw-B) – 49/92 –
![Page 249: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/249.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))
4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 250: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/250.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))
4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 251: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/251.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))
4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 252: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/252.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))
4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 253: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/253.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))
4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 254: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/254.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))
4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 255: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/255.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))
4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 256: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/256.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))
4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 257: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/257.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))
4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 258: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/258.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))
4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 259: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/259.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))
4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 260: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/260.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))
4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 261: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/261.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))
4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 262: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/262.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))
4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 263: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/263.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))
4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 264: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/264.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 265: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/265.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 266: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/266.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 267: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/267.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))
4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 268: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/268.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))
4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 269: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/269.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))
4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 270: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/270.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)
4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 271: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/271.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)
4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 272: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/272.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*6
24(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 273: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/273.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*6
24(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 274: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/274.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624
(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 275: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/275.jpg)
Beispiel . . .
4*(if 3 <= 1 then 1 else 3*(fakultaet(3-1)))4* (if False then 1 else 3*(fakultaet(3-1)))4*(3*(fakultaet(3-1)))4*(3*(if (3-1)<= 1 then 1 else (3-1)*(fakultaet((3-1)-1))))4*(3*(if 2 <= 1 then 1 else 2*(fakultaet(2-1))))4*(3*(if False then 1 else 2*(fakultaet(2-1))))4*(3*(2*(fakultaet(2-1))))4*(3*(2*(if (2-1)<= 1 then 1 else (2-1)*(fakultaet ((2-1)-1)))))4*(3*(2*(if 1 <= 1 then 1 else 1*(fakultaet(1-1)))))4*(3*(2*(if True then 1 else 1*(fakultaet(1-1)))))4*(3*(2*1))4*(3*2)4*624(18 Auswertungsschritte)
Grundlagen der Programmierung 2 (Ausw-B) – 50/92 –
![Page 276: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/276.jpg)
Ubersicht Reduktionsanzahl zu Beispielen
verzogerte R. applikative R. normale R.
(fakultaet 4) 18 18 24
main 2 20 2
main = const 5 (fakultaet 4)
Grundlagen der Programmierung 2 (Ausw-B) – 51/92 –
![Page 277: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/277.jpg)
Optimale Anzahl der Reduktionen
Es gilt: verzogerte Reduktionhat optimale Anzahl von Reduktionsschritten. !
• Es gilt immer:
# verzogerte R. ≤ # normale R.
# verzogerte R. ≤ # applikative R.
• Im allgemeinen gilt:# applikative R. und # normale R. sind unvergleichbar
• Wenn alle Reduktionsschritte fur das Ergebnis benotigt werden:
# verzogerte R. ≤ # applikative R. ≤ # normale R.
Grundlagen der Programmierung 2 (Ausw-B) – 52/92 –
![Page 278: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/278.jpg)
Reduktions-Strategien und Korrektheit
In deterministischen Programmiersprachen (z.B. Haskell)mit verzogerter (oder normaler) Reihenfolge der Auswertung gilt:
Reduktionen zur Compile-Zeitsind korrekte Programmtransformationend.h. die Semantik bleibt erhalten
Das ist i.a. falsch in Programmiersprachen, die die applikativeReihenfolge verwenden.
Grundlagen der Programmierung 2 (Ausw-B) – 53/92 –
![Page 279: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/279.jpg)
Auswertungsprozesse
Auswertungsprozesse
Grundlagen der Programmierung 2 (Ausw-B) – 54/92 –
![Page 280: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/280.jpg)
Rekursive Auswertungsprozesse
Wir betrachten jetzt Auswertungsprozesse, die durch eine einzigerekursive Funktion erzeugt werden
Wir betrachten bei der Analyse von Auswertungsprozessen nurdie applikative Reihenfolge
Beispiel: Auswertung der rekursiven Fakultatsfunktion
0! := 1n! := n ∗ (n− 1)! wenn n > 1
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
Grundlagen der Programmierung 2 (Ausw-B) – 55/92 –
![Page 281: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/281.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 282: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/282.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 283: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/283.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 284: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/284.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 285: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/285.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 286: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/286.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 287: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/287.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 288: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/288.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 289: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/289.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 290: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/290.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 291: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/291.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 292: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/292.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 293: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/293.jpg)
Auswertungsprozess, linear rekursiv
bei applikativer Reihenfolge der Auswertung(Nicht jeder Zwischenzustand ist angegeben)
(fakultaet 6)
(6 * (fakultaet (6-1)))
(6 * (5 * (fakultaet (5-1))))
(6 * (5 * (4 * (fakultaet (4-1)))))
(6 * (5 * (4 * (3 * (fakultaet (3-1))))))
(6 * (5 * (4 * (3 * (2 * (fakultaet (2-1)))))))
(6 * (5 * (4 * (3 * (2 * 1)))))
(6 * (5 * (4 * (3 * 2))))
(6 * (5 * (4 * 6)))
(6 * (5 * 24))
(6 * 120)
720
Grundlagen der Programmierung 2 (Ausw-B) – 56/92 –
![Page 294: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/294.jpg)
Auswertungsprozess, linear rekursiv
(fakultaet 6) Auswertungsprozess ist linear rekursiv
Charakteristisch: • nur eine rekursive Funktionsanwendungin jedem Ausdruck der Reduktionsfolge
• Zwischenausdrucke sind nicht beschrankt.
Grundlagen der Programmierung 2 (Ausw-B) – 57/92 –
![Page 295: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/295.jpg)
Alternative Berechnungen der Fakultat
Iteriere folgende Regel:Produkt ⇒ Produkt ∗ ZahlerZahler ⇒ Zahler + 1
fakt_iter produkt zaehler max =
if zaehler > max
then produkt
else fakt_iter (zaehler*produkt) (zaehler + 1) max
fakultaet_lin n = fakt_iter 1 1 n
Grundlagen der Programmierung 2 (Ausw-B) – 58/92 –
![Page 296: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/296.jpg)
Fakultat: andere Definitionsform
Verwendung lokaler Funktionen mit let . . . in . . .
fakultaet_lin n =
let fakt_iter produkt zaehler max =
if zaehler > max
then produkt
else fakt_iter (zaehler*produkt)
(zaehler + 1)
max
in fakt_iter 1 1 n
Grundlagen der Programmierung 2 (Ausw-B) – 59/92 –
![Page 297: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/297.jpg)
Endrekursion
Eine Endrekursion ist eine lineare Rekursion.Zusatzlich muss gelten:• In jedem Rekursionsaufruf:
der rekursive Aufrufberechnet direkt den Ruckgabewert
ohne Nachverarbeitung nach der Rekursion
Z.B. funktion a b c ruft auf funktion d e faber nicht g * (funktion d e f)
Grundlagen der Programmierung 2 (Ausw-B) – 60/92 –
![Page 298: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/298.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 299: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/299.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 300: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/300.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 301: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/301.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 302: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/302.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 303: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/303.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 304: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/304.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 305: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/305.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 306: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/306.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 307: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/307.jpg)
Auswertungsprozess, endrekursiv
Auswertung von (fakultaet_lin 5) bei verzogerter Reihenfolgeder Auswertung
(fakultaet lin 5)
(fakt iter 1 1 5)
(fakt iter (1*1) (1+1) 5)
(fakt iter (2*(1*1)) (2+1) 5)
(fakt iter (3*(2*(1*1))) (3+1) 5)
(fakt iter (4*(3*(2*(1*1)))) (4+1) 5)
(fakt iter (5*(4*(3*(2*(1*1))))) (5+1) 5)
(5*(4*(3*(2*(1*1)))))
120
Grundlagen der Programmierung 2 (Ausw-B) – 61/92 –
![Page 308: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/308.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 309: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/309.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 310: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/310.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 311: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/311.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 312: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/312.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 313: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/313.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 314: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/314.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 315: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/315.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 316: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/316.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 317: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/317.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 318: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/318.jpg)
Iterativer Auswertungsprozess
Iterativer Auswertungsprozess bei applikativer Auswertung:
(fakultaet lin 6)
(fakt iter 1 1 6)
(fakt iter 1 2 6)
(fakt iter 2 3 6)
(fakt iter 6 4 6)
(fakt iter 24 5 6)
(fakt iter 120 6 6)
(fakt iter 720 7 6)
720
Iterativer Prozess:
Charakteristisch: ist eine EndrekursionArgumente sind Basiswerte(bzw. Große des Gesamtausdrucks bleibt beschrankt.)optimierte Ruckgabe des Wertes
Grundlagen der Programmierung 2 (Ausw-B) – 62/92 –
![Page 319: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/319.jpg)
Optimierung der Endrekursion
imperative Program-miersprachen
Endrekursion i.a. nicht optimiert.d.h. Wert wird durch alle Stufen derRekursion zuruckgegeben
Haskell Endrekursion ist optimiert.am Ende wird der Wert unmittelbarzuruckgegeben.
Deshalb braucht man in imperativen Programmiersprachen:Iterationskonstruktefor ...do, while, repeat ...until.Diese entsprechen iterativen Auswertungsprozessen
Grundlagen der Programmierung 2 (Ausw-B) – 63/92 –
![Page 320: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/320.jpg)
Iteration in Haskell
Bei verzogerter Auswertung:
Eine rekursive Funktion f ist iterativ , wennf t1 . . . tn fur Basiswerte tibei applikativer Reihenfolge der Auswertungeinen iterativen Prozess ergibt.
Viele (nicht alle) linear rekursive Funktionenkann man zu iterativen umprogrammieren.Zum Beispiel: fakultaet zu fakultaet lin
Grundlagen der Programmierung 2 (Ausw-B) – 64/92 –
![Page 321: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/321.jpg)
Baumrekursion
Beispiel Berechnung der Fibonacci-Zahlen
1, 1, 2, 3, 5, 8, 13, 21, . . .
Fib(n) :=
0 falls n = 01 falls n = 1Fib(n− 1) + Fib(n− 2) sonst
fib n = if n <= 0 then 0
else if n == 1 then 1
else fib (n-1) + fib(n-2)
Grundlagen der Programmierung 2 (Ausw-B) – 65/92 –
![Page 322: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/322.jpg)
Auswertungsprozess zu fib
in applikativer Reihenfolge:Der Auswertungs-Prozess ergibt folgende Zwischen-Ausdrucke:
fib 5
fib 4 + fib 3
(fib 3 + fib 2) + fib 3
((fib 2 + fib 1) + fib 2) + fib 3
(((fib 1 + fib 0) + fib 1) + fib 2) + fib 3
(((1+0) + fib 1) + fib 2) + fib 3
((1 + fib 1) + fib 2) + fib 3
((1+1) + fib 2) + fib 3
(2 + fib 2) + fib 3
(2 + (fib 1 + fib 0)) + fib 3
.......
Grundlagen der Programmierung 2 (Ausw-B) – 66/92 –
![Page 323: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/323.jpg)
Auswertungsprozess zu fib
fib 5
fib 4 + fib 3
(fib 3 + fib 2) + fib 3
((fib 2 + fib 1) + fib 2) + fib 3
(((fib 1 + fib 0) + fib 1) + fib 2) + fib 3
(((1+0) + fib 1) + fib 2) + fib 3
((1 + fib 1) + fib 2) + fib 3
5
4 3
3 2 2 1
2 1 1 0 1 0
1 0
Grundlagen der Programmierung 2 (Ausw-B) – 67/92 –
![Page 324: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/324.jpg)
Auswertungsprozess zu fib: Baum der Aufrufe
5
4 3
3 2 2 1
2 1 1 0 1 0
1 0
Das ist BaumrekursionCharakteristisch: Ausdrucke in der Reduktionsfolge
• konnen unbegrenzt wachsen• konnen mehrere rekursive Aufrufe enthalten• Aber: nicht geschachtelt
(d.h. die Argumente eines rekursiven Aufrufsenthalten keine rekursiven Aufrufe)
Grundlagen der Programmierung 2 (Ausw-B) – 68/92 –
![Page 325: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/325.jpg)
Geschachtelte RekursionIst der allgemeine Fallwird normalerweise selten benotigt, da i.a. nicht effizientberechenbar. Beispiel: Die Ackermannfunktion
----- Ackermanns Funktion ----
ack 0 y = 1
ack 1 0 = 2
ack x 0 | x >= 2 = x+2
ack x y | x > 0 && y > 0 = ack (ack (x-1) y) (y-1)
benutzt folgende Programmier-Technik in Haskell:Mehrere Definitionsgleichungen einer FunktionReihenfolge: der Fallabarbeitungvon oben nach unten wird probiert, welche Definitionsgleichungpasst:
1) Argumente anpassen2) Bedingung rechts vom | prufen
Grundlagen der Programmierung 2 (Ausw-B) – 69/92 –
![Page 326: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/326.jpg)
Optimierte Ackermannfunktion
----- Ackermanns Funktion "optimiert" ----
ackopt 0 y = 1
ackopt 1 0 = 2
ackopt x 0 = x+2
ackopt x 1 = 2*x
ackopt x 2 = 2^x
ackopt x y | x > 0 && y > 0 =
ackopt (ackopt (x-1) y) (y-1)
Grundlagen der Programmierung 2 (Ausw-B) – 70/92 –
![Page 327: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/327.jpg)
Optimierte Ackermannfunktion (2)
*Main> anzahlStellen (ackopt 5 3) ←↩19729
19729 ist die Anzahl der Dezimalstellen
des Ergebnisses (ackopt 5 3) = 265536 = 2222
2
• sehr schnell wachsende Funktion• man kann nachweisen: man braucht geschachtelte Baum-Rekursion
um ack zu berechnen• hat Anwendung in der Komplexitatstheorie
Grundlagen der Programmierung 2 (Ausw-B) – 71/92 –
![Page 328: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/328.jpg)
Tabelle der Rekursionsprozesse:
”impl
izie
rt“
−−−−−−−−−→
geschachteltbaumrekursiv
mehrere rekursive Unterausdrucke auch inden Argumenten der rekursiven Unteraus-drucke erlaubt
baumrekursiv mehrere rekursive Unterausdrucke erlaubt,aber Argumente der rekursiven Unteraus-drucke ohne weitere Rekursion
linear rekursiv maximal ein rekursiver Unterausdruck
endrekursiv linear rekursiv und Gesamtresultat ist Wertdes rekursiven Unterausdrucks
iterativ endrekursiv und Argumente des rekursivenUnterausdrucks sind Basiswerte
Grundlagen der Programmierung 2 (Ausw-B) – 72/92 –
![Page 329: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/329.jpg)
Optimierung und Analyse
Im folgenden: Analyse auf Laufzeit und Speicherbedarf von:
fib
fakultaet
ggt
Grundlagen der Programmierung 2 (Ausw-B) – 73/92 –
![Page 330: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/330.jpg)
Optimierung: Iteration statt Rekursion
BeispielBerechnung von (fib 5)
5
4 3
3 2 2 1
2 1 1 0 1 0
1 0
fib 3 wird 2 mal berechnetfib 2 wird 3 mal berechnetfib 1 wird 5 mal berechnet
Grundlagen der Programmierung 2 (Ausw-B) – 74/92 –
![Page 331: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/331.jpg)
Optimierung: Iteration statt Rekursion
Genauer und Allgemeiner:Bei Berechnung von fib n fur n ≥ 2wird fib(1) jeweils (fib n)-mal berechnet
(fib n) ≈ Φn
√5
wobei Φ = 1+√5
2 ≈ 1.6180 (goldener Schnitt)
Fazit:# Reduktionen fur fib(n) ist exponentielld.h. die Laufzeit von fib ist exponentiell in n
Grundlagen der Programmierung 2 (Ausw-B) – 75/92 –
![Page 332: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/332.jpg)
Iterative Version von Fib
Beobachtung: zur Berechnung von fib(n) benotigt mannur die Werte fib(i) fur 1 ≤ i ≤ n.
Idee: Berechnung einer Wertetabelle fur fib.
Verbesserte Variante: aus fibn−1 und fibn−2 berechne fibn
ohne Doppelberechnung von Funktionswerten.Paar von Zahlen:(fibn−1, fibn−2)→ ((fibn−1 + fibn−2)︸ ︷︷ ︸
= fibn
, fibn−1)
Rechenvorschrift: (a, b)→ (a+ b, a)
Grundlagen der Programmierung 2 (Ausw-B) – 76/92 –
![Page 333: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/333.jpg)
Iterative Version von fib: Funktionen
fib_lin n = (fib_iter 1 0 n)
fib_iter a b zaehler = if zaehler <= 0
then b
else fib_iter (a + b)
a
(zaehler - 1)
Grundlagen der Programmierung 2 (Ausw-B) – 77/92 –
![Page 334: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/334.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 335: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/335.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 336: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/336.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 337: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/337.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 338: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/338.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 339: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/339.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 340: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/340.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 341: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/341.jpg)
Prozess fur (fib lin 5)
(fib lin 5)
(fib iter 1 0 5)
(fib iter 1 1 4)
(fib iter 2 1 3)
(fib iter 3 2 2)
(fib iter 5 3 1)
5
Grundlagen der Programmierung 2 (Ausw-B) – 78/92 –
![Page 342: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/342.jpg)
Analyse der fib-Optimierung
Fur (fib_lin n) gilt:• ist operational aquivalent zu fib
• benotigt linear viele Reduktionen abhangig von n• Große der Ausdrucke ist beschrankt• Platzbedarf ist konstant (d.h. unabhangig) von n.
(unter Vernachlassigung der Darstellungsgroße der Zahlen)
erzeugt iterativen Auswertungsprozess (applikative R.)
Grundlagen der Programmierung 2 (Ausw-B) – 79/92 –
![Page 343: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/343.jpg)
Analyse von Programmen
Abschatzung und Messung des Ressourcenbedarfsvon Haskell-Programmen,bei verzogerter Auswertung:
Zeit: Anzahl der Transformationsschritte
Platz: (Gesamt-Speicher): Maximale Große der Ausdrucke
Arbeitsspeicher: Maximale Große der Ausdrucke(ohne die Eingabe)
arithmetische und Boolesche Operationen= 1 Transformationsschritt.
Grundlagen der Programmierung 2 (Ausw-B) – 80/92 –
![Page 344: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/344.jpg)
Analyse von Programmen (2)
Angabe des Ressourcenbedarf eines Algorithmusin Abhangigkeit von der Große der Eingabe.
Notation fur Algorithmus alg bei Eingabe der Große n:redalg(n) maximale Anzahl der Reduktionen bei verzogerter
Auswertung fur alle Eingaben der Große n.
Platzalg(n) Platzbedarf: maximale Große der Ausdrucke (desgerichteten Graphen) bei verzogerter Auswertungfur alle Eingaben der Große n.Die Eingaben nicht mitzahlen
Grundlagen der Programmierung 2 (Ausw-B) – 81/92 –
![Page 345: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/345.jpg)
Beispiel: Fibonacci-Funktion fib
fib n = if n <= 0 then 0
else if n == 1 then 1
else fib (n-1) + fib(n-2)
redfib(n) ≈ 1.6n (einfach exponentiell)
Bezugsgroße: Zahl n
Achtung: Die Komplexitatsberechnung verwendeti.a. die Speicher-Große der Eingabe
(d.h. Anzahl der Stellen einer Zahl)
Grundlagen der Programmierung 2 (Ausw-B) – 82/92 –
![Page 346: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/346.jpg)
Beispiel fakultaet n
fakultaet x = if x <= 1 then 1
else x*(fakultaet (x-1))
fakultaet n benotigt 5 ∗ (n− 1) + 3 Reduktionsschritte.bei verzogerter Reihenfolge der Auswertung
(Kann man durch Beispielauswertungen raten)Z.B. fakultaet 4 benotigt 18 Reduktionsschritte.
Nachweis mit vollstandiger Induktion ....
Grundlagen der Programmierung 2 (Ausw-B) – 83/92 –
![Page 347: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/347.jpg)
Beispiel fakultaet n: Nachweis
Nachzuweisen ist: fakultaet (n-1) benotigt 5 ∗ (n− 2) + 4fur n ≥ 2 bei verzogerter Reihenfolge der Auswertung:
Induktions-Basis:
fakultaet (2-1)
if (2-1) <= 1 then 1 else ...
if 1 <= 1 then 1 else ...
if True then 1 else ...
1
Das sind 4 Reduktionsschritte.
Da 5 ∗ (2− 1− 1) + 4 = 4, gilt die Formel in diesem Fall.
Grundlagen der Programmierung 2 (Ausw-B) – 84/92 –
![Page 348: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/348.jpg)
Beispiel fakultaet n: Nachweis
Nachzuweisen ist: fakultaet (n-1) benotigt 5 ∗ (n− 2) + 4 fur n > 2bei verzogerter Reihenfolge der Auswertung:Induktions-Schritt:
fakultaet (n-1)
if (n-1) <= 1 then ...
if n1 <= 1 then ... -- n1 ist Basiswert > 1
if False then ...
n1*fakultaet (n1-1) -- Berechnung von n2 geht
-- als Ind.-hypothese ein
n1*n2 -- Produkt-Berechnung zaehlt noch dazu
n3
Das sind 5 + 5 ∗ (n1− 2) + 4 = 5 ∗ (n− 2) + 4 Reduktionsschritte
Grundlagen der Programmierung 2 (Ausw-B) – 85/92 –
![Page 349: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/349.jpg)
Beispiel fakultaet n: Nachweis
Nachzuweisen ist: fakultaet n benotigt 5 ∗ (n− 1) + 3 fur n > 1bei verzogerter Reihenfolge der Auswertung:Induktions-Schritt:
fakultaet n
if n <= 1 then ... n ist > 1
if False then ...
n*fakultaet (n-1) -- s.o.: 5*(n-2)+4 Schritte
n*n2 -- Produkt-Berechnung zaehlt noch dazu
n3
Das sind 4 + 5 ∗ (n− 2) + 4 = 5 ∗ (n− 1) + 3 Reduktionsschritte
Fur n = 4 ergibt das 5 ∗ 3 + 3 = 18 Reduktionsschritte furfakultaet 4.
Grundlagen der Programmierung 2 (Ausw-B) – 86/92 –
![Page 350: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/350.jpg)
Komplexitaten von Algorithmen
Beachte: breite Streuung des Ressourcenbedarfs ist moglich furdie Menge aller Eingaben einer bestimmten Große.
Komplexitaten von Platz und Zeit:
Ressourcenbedarf verschiedene Varianten:
im schlimmsten Fall (worst-case)im besten Fall (best-case)
Minimum der Anzahl der Reduktionenbzw. Minimum der Große der Ausdrucke.
im Mittel (average case)Welche Verteilung?
Grundlagen der Programmierung 2 (Ausw-B) – 87/92 –
![Page 351: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/351.jpg)
Asymptotischen Komplexitaten
Als Beispiel hatten wir das Ergebnis:
fakultaet (n-1) benotigt 5 ∗ (n− 1) + 3 Reduktionen fur n > 2.
Abschatzung von 5 ∗ (n− 1) + 3 nach oben (als Funktion von n):
5 ∗ (n− 1) + 3 ≤ 6 · n
Geschrieben als λn.(5 ∗ (n− 1) + 3) ∈ O(n).! Multiplikative und additive Konstanten werden ignoriert.
Grundlagen der Programmierung 2 (Ausw-B) – 88/92 –
![Page 352: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/352.jpg)
Einige Komplexitaten
O(1) konstantO(log(n)) logarithmischO(n) linearO(n ∗ log(n)) fastlinear (oder auch n-log-n)O(n2) quadratischO(n3) kubischO(nk) polynomiellO(2n) exponentiell
n ist die Große der Eingabe (i.a Bit-Anzahl)
Grundlagen der Programmierung 2 (Ausw-B) – 89/92 –
![Page 353: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/353.jpg)
Analyse zum großten gemeinsamen Teiler
ggT(a, b) (Euklids Algorithmus)
Teile a durch b; ergibt Rest r,wenn r = 0, dann ggT(a, b) := bwenn r 6= 0, dann berechne ggT(b, r).
Beispiel ggT(30, 12) = ggT(12, 6) = 6
ggt a b = if b == 0
then a
else ggt b (rem a b)
Grundlagen der Programmierung 2 (Ausw-B) – 90/92 –
![Page 354: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/354.jpg)
Komplexitat des Euklidischen Algorithmus
SATZ (Lame, 1845):Wenn der Euklidische ggt-Algorithmus k Schritte benotigt,dann ist die kleinere Zahl der Eingabe ≥ fib(k).
Platz- und Zeitbedarf von ggt: O(log(n))
Begrundung:Wenn n die kleinere Zahl ist und der Algorithmus k Schrittebenotigt,dann ist n ≥ fib(k) ≈ 1.6180k
Also ist Anzahl der Rechenschritte k = O(log(n))
Grundlagen der Programmierung 2 (Ausw-B) – 91/92 –
![Page 355: Grundlagen der Programmierung 2prg2/SS2018/folien/teil1/fol... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr. Manfred Schmidt-Schauˇ Sommersemester 2018](https://reader034.vdokument.com/reader034/viewer/2022050715/5e0500f1e411594b7c3a63ae/html5/thumbnails/355.jpg)
Vergleichstabelle (Zusammenfassung)
Aufruf Zeitaufwand - Abschatzung
Arithmetische Operationen als O(1) angenommen
fakultaet n O(n)fib n O(1, 62n)fib lin n O(n)ggt m n O(log(max(m,n)))m+ n O(1) m,n :: Intm ∗ n O(1) m,n :: Intquadratsumme m n O(1) m,n :: Int
Arithmetische Operationen auf großen Zahlen
m+ n O(log(m+ n)) m,n :: Integerm ∗ n O(log(m+ n)) m,n :: Integerquadratsumme m n O(log(m+ n)) m,n :: Integer
Grundlagen der Programmierung 2 (Ausw-B) – 92/92 –