Aufgabe 2 - Professur für Künstliche Intelligenz und

Werbung
Prof. Dr. Manfred Schmidt-Schauß
Künstliche Intelligenz/Softwaretechnologie
Fachbereich Informatik und Mathematik/ Institut für Informatik
Johann Wolfgang Goethe-Universität Frankfurt am Main
Einführung in die funktionale Programmierung
Wintersemester 2006/2007
Aufgabenblatt Nr. 4
Abgabe: Donnerstag 16. November 2006 vor! der Vorlesung
Bitte senden Sie den zu Ihrer Lösung zugehörigen dokumentierten Quellcode auch per Email an
[email protected]!
Aufgabe 1 (18 Punkte)
a) Definieren Sie in Haskell die folgenden Ströme von Zahlen (in String-Darstellung):
– Einen Strom b::[String] der positiven Binärzahlen:
["1","10","11","100","101","110","111","1000",...]
(4 Punkte)
– Einen Strom h::[String] der positiven Hexadezimalzahlen:
["1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","10",...]
(4 Punkte)
b) Implementieren Sie nun eine Funktion genStream :: [String] -> [String], die ein Alphabet erwartet und den Strom aller über diesem Alphabet gebildeten Zahlen liefert.
Z.B. soll genStream ["0","1","2","3","4","5","6","7","8","9"] den Strom der positiven Dezimalzahlen liefern.
Definieren Sie mit Hilfe von genStream den Strom der Oktalzahlen über dem Alphabet
"0","1","2","3","4","5","6","7".
(10 Punkte)
Aufgabe 2 (8 Punkte)
Definieren Sie in Haskell eine Funktion numbering :: [String] -> String -> String, die
als Eingabe einen Strom von Zahlen (in Form von Strings) und einen Text erhält und den Text
anhand des ersten Stromes zeilenweise nummeriert und somit wiederum einen Text als Ausgabe
liefert.
Zur Illustration zwei Beispielaufrufe:
*Main> numbering [show x | x <-[1..]] "Zeile 1\nZeile 2\nZeile 3\n"
"1Zeile 1\n2Zeile 2\n3Zeile 3\n"
*Main> putStr $ numbering [show x | x <-[1..]] "Zeile 1\nZeile 2\nZeile 3\n"
1Zeile 1
2Zeile 2
3Zeile 3
Testen Sie die Funktion numbering unter Verwendung der Ströme aus Aufgabe 1.
1
Aufgabe 3 (12 Punkte)
Überführen Sie folgende List Comprehension mit dem in der Vorlesung vorgestellten Verfahren
in Haskell ohne List Comprehensions.
[w |
v <- [[x,y] | x <- [1,3..20], y <- [2,4..20], y == x+1] , w <- v]
Aufgabe 4 (12 Punkte)
Berechnen Sie jeweils den polymorphen Typ der Ausdrücke
• (concat.concat)
(6 Punkte)
• (.).(.)
(6 Punkte)
wobei Sie die Typen für concat und (.) verwenden dürfen:
concat :: [[a]] -> [a]
(.) :: (b -> c) -> (d -> b) -> d -> c
Geben Sie auch jeweils die berechnete Typsubstitution an.
2
Herunterladen