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. 8 Abgabe: Dienstag, 24. Juni 2003 vor der Vorlesung Aufgabe 1 (16 Punkte) a) Definieren Sie in Haskell einen Datentyp KFPTExp zur Repräsentation von Ausdrücken der Sprache KFPT, wobei Sie kein getyptes case, sondern ein allgemeines case bereit stellen können. (6 Punkte) b) Implementieren Sie zwei Funktionen, die eine top-level case- bzw. Beta-Reduktion auf einem Ausdruck vom Typ KFPTExp durchführen. (10 Punkte) Aufgabe 2 (18 Punkte) Typisieren Sie den im folgenden definierten Superkombinator ff sowohl mit dem iterativen als auch mit dem Milner-Typisierungsverfahren, wobei Sie in der Anfangsannahme verwenden dürfen, dass 1::Int, (:) :: a -> [a] -> [a] sowie (+) :: Int -> Int -> Int. ff xs = case xs of (y:ys) -> 1 + (ff y) + (ff ys) Aufgabe 3 (8 Punkte) Wie bereits in der Vorlesung erläutert wurde, ist der Ausdruck \x -> x == \x -> x in Haskell nicht typisierbar, da keine Instanz der Klasse Eq für den Typ a -> a definiert ist. Warum ist es nicht sinnvoll eine solche Instanz zu implementieren? Für welche Typinstanzen des Typs a -> a, wie z.B. Bool -> Bool oder Integer -> Integer, ist es möglich eine sinnvolle Instanz der Klasse Eq zu implementieren? Aufgabe 4 (8 Punkte) Beweisen Sie folgende Aussagen der Form l 6∼c r, indem Sie jeweils einen Kontext C angeben, sodass (C[l] ⇓ und C[r] ⇑) oder (C[l] ⇑ und C[r] ⇓). a) 1 6∼c 2 (3 Punkte) b) (\x -> caseList x of {Nil -> Nil; Cons a b -> Nil}) 6∼c (\x -> Nil) (5 Punkte) 1