Blatt 1 - Professur für Künstliche Intelligenz und Softwaretechnologie

Werbung
Prof. Dr. Manfred Schmidt-Schauß
Künstliche Intelligenz/Softwaretechnologie
Fachbereich Biologie und Informatik / Institut für Informatik
Johann Wolfgang Goethe-Universität Frankfurt am Main
Funktionale Programmierung
Sommersemester 2003
Aufgabenblatt Nr. 1
Abgabe: Dienstag, 06. Mai 2003 vor der Vorlesung
Aufgabe 1 (15 Punkte)
Betrachten Sie folgende Konstrukte:
1. ((\x -> (Cons True)) y)
2. (if True then (Paar True True) else (Paar False False))
3. (caseList ((\z -> z) Nil) of {Nil -> (Paar a b); (Cons a b) -> ((\x -> (Paar x x)) b)})
4. (Cons ((\x -> (x x)) (\y -> (y y))) (((\u -> (\z -> u)) Nil) True))
5. (casePaar x of {(Paar y y) -> True; (Paar y z) -> False})
6. ((\x -> (Cons True x True)) True)
7. ((\z -> (z x)) (casePaar a of {(Paar a b) -> ((\x -> (x y)) a)}))
8. ((\x -> x) (caseList (Cons True Nil) of {(Cons a Nil) -> a; Nil -> False}))
a) Welche der Konstrukte sind KFPT-Ausdrücke? Begründen Sie, warum die übrigen Konstrukte keine KFPT-Ausdrücke sind. (9 Punkte)
b) Berechnen Sie für die KFPT-Ausdrücke, jeweils die gebundenen und freien Variablen.
Welche der KFPT-Ausdrücke sind geschlossen? (6 Punkte)
Aufgabe 2 (20 Punkte)
Betrachten Sie folgenden KFPT-Ausdruck t




caseBool (((\x -> ((\z -> z) (\y -> y))) False) True)
 (\b -> b) False
t =  of {False -> (\a -> a);
True -> ((\u -> (\v -> v)) True)}
a) Geben Sie alle Reduktionskontexte R mit ∃s : R[s] = t an. (5 Punkte)
b) Werten Sie t in Normalordnung aus und geben Sie für jede Ein-Schritt-Reduktion die
verwendete Reduktionsregel an. (5 Punkte)
1
c) Werten Sie nun t in einer anderen Reihenfolge als in Normalordnung aus. Geben Sie wiederum für jede Reduktion die verwendete Regel an. (5 Punkte)
d) Lassen Sie den Ausdruck vom Haskell-Interpreter HUGS auswerten und schalten Sie dabei
die Statistikanalyse ein – dies ist möglich mit der Option :s +s.
Wie viele Reduktionen werden für die Auswertung benötigt? Beachten Sie, dass Sie den
Ausdruck direkt im Interpreter eingeben können, wenn Sie das Konstrukt case_Bool durch
case ersetzen. (5 Punkte)
Aufgabe 3 (15 Punkte)
a) Definieren Sie in KFPTS einen Superkombinator first_and_last, der als Argument ein
Tripel erwartet und ein Paar bestehend aus der ersten und dritten Komponente des Tripels
liefert. Sie können dabei annehmen, dass die Konstruktoren Tripel mit Stelligkeit 3 und
Paar mit Stelligkeit 2 vorhanden sind. (5 Punkte)
b) Werten Sie den Ausdruck
first and last (Tripel ((\x -> x) 0 a0 ) ((\y -> 0 a0 ) True) 0 b0 )
aus, wobei Sie für jeden Reduktionsschritt die verwendete Regel angeben. Haben Sie dabei
Normalordnung verwendet? (5 Punkte)
c) Definieren Sie nun den Superkombinator first_and_last in Haskell. Dafür müssen Sie
eine Datei mit der Endung .hs anlegen in der Sie zusätzlich zur Definition des Superkombinators die Datentypen für das Paar und das Tripel wie folgt definieren können:
data Paar = Paar Char Char
deriving(Show)
data Tripel = Tripel Char Char Char
deriving(Show)
Testen Sie Ihre Implementierung wahlweise mit dem HUGS oder GHCi und führen Sie einige Aufrufe der Funktion first_and_last durch, insbesondere mit dem selben Argument
wie in Aufgabenteil b). (5 Punkte)
2
Herunterladen