Aufgabe 3 (8 Punkte) - Professur für Künstliche Intelligenz und

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. 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
Herunterladen