345
1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauß Sommersemester 2014

Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

  • Upload
    lamque

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

1

Grundlagen der Programmierung 2

Haskell: Auswertung

Prof. Dr Manfred Schmidt-Schauß

Sommersemester 2014

Page 2: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 2/86 –

Page 3: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: Aufrufhierarchie

quadrat x = x*x

quadratsumme x y = (quadrat x) + (quadrat y)

quadratsumme referenziert direkt die Funktion quadrat,quadratsumme referenziert direkt die (eingebaute) Funktion +quadratsumme referenziert die Funktionen {quadrat, ∗,+}

Die Funktion quadratsumme ist somit nicht rekursiv

Grundlagen der Programmierung 2 (Ausw-B) – 3/86 –

Page 4: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 4/86 –

Page 5: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 5/86 –

Page 6: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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.

Grundlagen der Programmierung 2 (Ausw-B) – 6/86 –

Page 7: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 7/86 –

Page 8: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 8/86 –

Page 9: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: großter gemeinsamer Teiler: ggt

ggt:: Integer -> Integer -> Integer

ggt a b = if b == 0

then a

else ggt b (rem a b)

Basisfall: ?

b = 0

Rekursionsfall: ?

b > 0

Terminierung: ?

Annahme: a,b ≥ 0Zwei Falle: a ≥ b; a < b

Grundlagen der Programmierung 2 (Ausw-B) – 9/86 –

Page 10: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: großter gemeinsamer Teiler: ggt

ggt:: Integer -> Integer -> Integer

ggt a b = if b == 0

then a

else ggt b (rem a b)

Basisfall: ? b = 0

Rekursionsfall: ?

b > 0

Terminierung: ?

Annahme: a,b ≥ 0Zwei Falle: a ≥ b; a < b

Grundlagen der Programmierung 2 (Ausw-B) – 9/86 –

Page 11: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: großter gemeinsamer Teiler: ggt

ggt:: Integer -> Integer -> Integer

ggt a b = if b == 0

then a

else ggt b (rem a b)

Basisfall: ? b = 0

Rekursionsfall: ? b > 0

Terminierung: ?

Annahme: a,b ≥ 0Zwei Falle: a ≥ b; a < b

Grundlagen der Programmierung 2 (Ausw-B) – 9/86 –

Page 12: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: großter gemeinsamer Teiler: ggt

ggt:: Integer -> Integer -> Integer

ggt a b = if b == 0

then a

else ggt b (rem a b)

Basisfall: ? b = 0

Rekursionsfall: ? b > 0

Terminierung: ? Annahme: a,b ≥ 0Zwei Falle: a ≥ b; a < b

Grundlagen der Programmierung 2 (Ausw-B) – 9/86 –

Page 13: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 10/86 –

Page 14: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 11/86 –

Page 15: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Baum

Baum Baum (auf dem Kopf stehend)

• •

OO

• • •

__

__ ??

__ ??

gg 77

OO

•��•

ww ''•�� ��

•�� ��

•��

• • •��

• •

Grundlagen der Programmierung 2 (Ausw-B) – 12/86 –

Page 16: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Syntaxbaum: Beispiele

Zwei Syntaxbaume zum Ausdruck 1-2-3:

�� ��1 −

~~ ��2 3

(1− (2− 3))

−�� ��

��

3

1 2

((1− 2)− 3)

Nur einer passt zu 1-2-3 in Haskell.

Grundlagen der Programmierung 2 (Ausw-B) – 13/86 –

Page 17: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Auswertung von Haskell-Programmen

Eindeutige Festlegung der Ausfuhrung durch eine Strategie: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) – 14/86 –

Page 18: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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)

• Transformation terminiert nicht

Grundlagen der Programmierung 2 (Ausw-B) – 15/86 –

Page 19: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 ti fur i = 1, . . . , n

Beispiel

quadrat x = x*x

quadrat 11 → x*x[11/x] = 11*11

Grundlagen der Programmierung 2 (Ausw-B) – 16/86 –

Page 20: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 ti fur i = 1, . . . , n

Beispiel

quadrat x = x*x

quadrat 11 → x*x[11/x] = 11*11

Grundlagen der Programmierung 2 (Ausw-B) – 16/86 –

Page 21: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 17/86 –

Page 22: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 18/86 –

Page 23: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 18/86 –

Page 24: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 18/86 –

Page 25: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 18/86 –

Page 26: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Boolesche Auswertungen

v && w oder v || w oder not w

Definitionen von und, oder, nicht,aquivalent zu den vordefinierten:

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) – 19/86 –

Page 27: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 20/86 –

Page 28: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 21/86 –

Page 29: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 ist moglich

Grundlagen der Programmierung 2 (Ausw-B) – 22/86 –

Page 30: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 ist moglich

Grundlagen der Programmierung 2 (Ausw-B) – 22/86 –

Page 31: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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

Grundlagen der Programmierung 2 (Ausw-B) – 23/86 –

Page 32: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5)

→ (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 33: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5)

→ (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 34: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5)

→ 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 35: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5)

→ 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 36: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5)

→ 9 ∗ 9 → 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) – 24/86 –

Page 37: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5)

→ 9 ∗ 9 → 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) – 24/86 –

Page 38: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9

→ 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) – 24/86 –

Page 39: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9

→ 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) – 24/86 –

Page 40: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 41: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 42: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 43: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 44: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 45: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 46: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 47: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 48: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 49: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 50: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 51: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 52: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 53: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 54: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 55: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 56: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 57: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Transformationsmoglichkeiten

3 verschiedene Auswertungen fur quadrat (4+5) :

quadrat(4 + 5) → (4 + 5) ∗ (4 + 5) → 9 ∗ (4 + 5) → 9 ∗ 9 → 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) – 24/86 –

Page 58: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Reduktionsstrategien

Wichtige Reduktionsstrategien

Applikative Reihenfolge:Argumentauswertung vor Definitionseinsetzung

Normale Reihenfolge:Definitionseinsetzung vor Argumentauswertung

Verzogerte Reihenfolge:Normale Reihenfolge mit Sharing

Grundlagen der Programmierung 2 (Ausw-B) – 25/86 –

Page 59: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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.

Grundlagen der Programmierung 2 (Ausw-B) – 26/86 –

Page 60: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 27/86 –

Page 61: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Applikative Reihenfolge der Auswertung

Werte den Ausdruck t applikativ aus! Falle:• 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) – 28/86 –

Page 62: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: applikative Auswertung

Wo im Ausdruck applikativ auswerten?

quadrat (quadrat ((quadrat 2) + (quadrat 3)))

Grundlagen der Programmierung 2 (Ausw-B) – 29/86 –

Page 63: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 64: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 65: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 66: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 67: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 68: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 69: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 70: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 71: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 72: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 73: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 29/86 –

Page 74: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 75: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 76: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 77: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 78: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 79: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 80: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 81: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 82: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 83: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 84: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 85: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 86: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 87: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 88: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 89: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 90: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur applikative Reihenfolge

quadrat x = x*x

2 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) – 30/86 –

Page 91: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 92: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 93: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 94: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 95: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 96: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 97: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 98: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 99: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 100: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 101: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 102: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 103: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 31/86 –

Page 104: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 105: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 106: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 107: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 108: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 109: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 110: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 111: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 112: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 113: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 114: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 115: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 116: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 117: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 118: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 119: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 120: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 121: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 122: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 123: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 124: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 125: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 126: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 127: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 128: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 129: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 130: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 32/86 –

Page 131: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 33/86 –

Page 132: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Normale Reihenfolge der Auswertung

• Definitionseinsetzung vor Argumentauswertung• wird in Haskell benutzt

Grundlagen der Programmierung 2 (Ausw-B) – 34/86 –

Page 133: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 35/86 –

Page 134: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 135: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 136: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 137: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 138: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 139: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel: normale Auswertung

Wo im Ausdruck normal auswerten?

(quadrat (2 + 3)) ∗ (quadrat (2 + 3))

Grundlagen der Programmierung 2 (Ausw-B) – 36/86 –

Page 140: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 141: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 142: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 143: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 144: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 145: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 146: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 147: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 148: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 149: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 150: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 151: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 152: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 153: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 154: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 155: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 156: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 157: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 158: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 159: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 160: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 161: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 162: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 163: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 164: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 165: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 166: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 167: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 168: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 169: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fur normale Reihenfolge

quadrat x = x*x

2 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) – 37/86 –

Page 170: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 171: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 172: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 173: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 174: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 175: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 176: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 177: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 38/86 –

Page 178: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 179: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 180: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 181: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 182: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 183: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 184: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 185: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 186: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 187: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 188: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 189: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 190: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 191: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 192: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 193: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 194: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 195: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 196: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 197: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 198: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 199: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 200: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 201: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 202: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 203: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 204: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 205: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 39/86 –

Page 206: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 207: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 208: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 209: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 210: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 211: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 212: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 213: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 214: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 215: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 216: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 217: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 218: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 219: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 220: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 221: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 222: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 223: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 40/86 –

Page 224: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 41/86 –

Page 225: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 42/86 –

Page 226: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 43/86 –

Page 227: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 44/86 –

Page 228: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 45/86 –

Page 229: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 230: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 231: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 232: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 233: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 234: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 235: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 236: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 237: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 238: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 239: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 240: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 241: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 46/86 –

Page 242: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 243: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 244: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 245: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 246: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 247: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 248: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 249: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 250: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 251: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 252: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 253: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 254: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 255: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 256: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 257: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 258: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 259: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 260: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 261: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 262: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 263: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 264: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 265: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 266: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 267: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 268: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 47/86 –

Page 269: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 48/86 –

Page 270: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 49/86 –

Page 271: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Reduktions-Strategien und Korrektheit

In deterministischen Programmiersprachen (z.B. Haskell)mit verzogerter Reihenfolge der Auswertung:

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) – 50/86 –

Page 272: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Auswertungsprozesse

Grundlagen der Programmierung 2 (Ausw-B) – 51/86 –

Page 273: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 52/86 –

Page 274: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 275: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 276: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 277: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 278: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 279: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 280: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 281: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 282: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 283: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 284: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 285: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 286: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 53/86 –

Page 287: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 54/86 –

Page 288: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 55/86 –

Page 289: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Endrekursion

Eine Endrekursion ist eine lineare Rekursion.Zusatzlich muss gelten:• In jedem Rekursionsaufruf: der rekursive Aufruf berechnet di-

rekt den Ruckgabewertohne Nachverarbeitung

Grundlagen der Programmierung 2 (Ausw-B) – 56/86 –

Page 290: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 291: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 292: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 293: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 294: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 295: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 296: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 297: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 298: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 299: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 57/86 –

Page 300: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 301: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 302: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 303: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 304: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 305: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 306: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 307: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 308: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 309: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 310: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 58/86 –

Page 311: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 59/86 –

Page 312: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 60/86 –

Page 313: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 61/86 –

Page 314: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 62/86 –

Page 315: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 63/86 –

Page 316: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 64/86 –

Page 317: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Geschachtelte Rekursion

Ist 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:Reihenfolge: der Fallabarbeitungvon oben nach unten wird probiert, welche Definitionsgleichungpasst:

1) Argumente anpassen2) Bedingung rechts vom | prufen

Grundlagen der Programmierung 2 (Ausw-B) – 65/86 –

Page 318: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 66/86 –

Page 319: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Optimierte Ackermannfunktion (2)

*Main> logI10 (ackopt 5 3) ←↩19728.301029995662

19728 ist die Anzahl der Dezimalstellen

des Ergebnisses (ackopt 5 3) = 265536 = 22222

• 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) – 67/86 –

Page 320: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 68/86 –

Page 321: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Optimierung und Analyse

Wir analysieren beispielhaft folgende Funktionenauf Laufzeit und Speicherbedarf:

fakultaet

fib

ggt

Grundlagen der Programmierung 2 (Ausw-B) – 69/86 –

Page 322: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 70/86 –

Page 323: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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√

5wobei Φ = 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) – 71/86 –

Page 324: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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(fibn−1, fibn−2)→ (fibn−1 + fibn−2)︸ ︷︷ ︸

= fibn

, fibn−1)

Rechenvorschrift: (a, b)→ (a+ b, a)

Grundlagen der Programmierung 2 (Ausw-B) – 72/86 –

Page 325: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 73/86 –

Page 326: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 327: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 328: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 329: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 330: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 331: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 332: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 333: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 74/86 –

Page 334: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 75/86 –

Page 335: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 76/86 –

Page 336: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 77/86 –

Page 337: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 Komplexitatstheorie verwendeti.a. die Speicher-Große der Eingabe

Grundlagen der Programmierung 2 (Ausw-B) – 78/86 –

Page 338: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fakultaet n

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) – 79/86 –

Page 339: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Beispiel fakultaet n: Nachweis

Induktions-Schritt:Nachzuweisen ist: fakultaet (n-1) benotigt 5 ∗ (n− 1) + 3 fur n > 2.

fakultaet (n-1)

if (n-1) <= 1 then ...

if n1 <= 1 then ... -- n1 ist Basiswert > 1

if False then ...

n1*fakultaet (n1-1) -- Wert n2 als Ind hypothese zaehlt nicht

n1*n2 -- Produkt-Berechnung zaehlt noch dazu

n3

Das sind 5 + 5 ∗ (n1− 1) + 3 = 5 ∗ (n− 1) + 3 Reduktionsschritte

Grundlagen der Programmierung 2 (Ausw-B) – 80/86 –

Page 340: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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 von # Reduktionenbzw. Minimum der Große der Ausdrucke.

im Mittel (average case)Welche Verteilung?

Grundlagen der Programmierung 2 (Ausw-B) – 81/86 –

Page 341: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

Abschatzung von Komplexitaten mit O(.)

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) – 82/86 –

Page 342: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 83/86 –

Page 343: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 84/86 –

Page 344: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 85/86 –

Page 345: Grundlagen der Programmierung 2 - …prg2/SS2014/folien/teil1/... · 1 Grundlagen der Programmierung 2 Haskell: Auswertung Prof. Dr Manfred Schmidt-Schauˇ Sommersemester 2014

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) – 86/86 –