Prof. Dr. Manfred Schmidt-Schauß Fachbereich Informatik (20) Künstliche Intelligenz/Softwaretechnologie Johann Wolfgang Goethe-Universität Frankfurt am Main

Einführung in das funktionale Programmieren

Wintersemester 1995/96

Übungsblatt Nr. 11

Beta-VERSION

For hanigen with hunigen still haunt ahunt to finnd their hinnigen wherePappappapparrassannuaragheallachnatullaghmonganmacmacmacwhackfalltherdebblenonthedubblandaddydoodled and anruly person creeked a jest. Gestapose to parry off cheekars or frankfurters on the odor. Fine again, Cuoholson! Peace, O wiley!

aus James Joyce: Finnegans Wake

Aufgabe 1

Es sei folgender algebraischer Datentyp gegeben:

data Tree a = Tip a
            | Knode (Tree a) (Tree a)

Weiter definieren wir folgenden Superkombinator:

akk f g (Tip a) = g a
akk f g (Knode a b) = f (akk f g a) (akk f g b)

a) Übersetzen Sie den Superkombinator akk in einen äquivalenten CORE-FPT und Kernsprachenausdruck.

b) Compilieren Sie den Kernsprachenausdruck aus Aufgabenteil a) in G-Code.

c) Evaluieren Sie den Ausdruck

     main = (akk + (* 2) (Knode (Tip 1) (Tip 2)))

mit Ihrem G-Code aus Aufgabenteil b). Gehen Sie dabei von folgendem Stackinhalt aus:

     +, (* 2), (<2,2> (<1,1> 1) (<1,1> 2)), @, ...

Aufgabe 2

Die G-Maschine, die im Praktikum funktionales Programmieren entwickelt wurde, hat folgenden G-Code erzeugt:

Code for f
Code:{Push 1
Eval
Casejump
[2:   Code:{Split 0
Pack 2 0
Update 2
Pop 2
Unwind}
1:   Code:{Split 2
Push 0
Push 3
Mkap
Eval
Cond
[2:   Code:{Push 1
Push 3
Pushglobal f
Mkap
Mkap
Push 1
Pack 1 2
Update 4
Pop 4
Unwind}
1:   Code:{Push 1
Push 3
Pushglobal f
Mkap
Mkap
Update 4
Pop 4
Unwind}
]}
]}

a) Führen sie die den Code an einem Beipiel aus. Wenden sie f hierzu auf folgende zwei Argumente an:

– odd als strikte boolsche Funktion, die True für ungerade Argumente ist, und

– (<1,2> 1 (<1,2> 2 <0,0>))

b) Versuchen Sie, für die Funktion f eine entprechende Kernsprachendefinition anzugeben. Wie heißt die Funktion im Prelude?