Aufgabe 2 - Goethe

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
Grundlagen der Programmierung 2
Sommersemester 2008
Aufgabenblatt Nr. 9
Abgabe: Mittwoch 11. Juni 2008 vor! der Vorlesung
Bitte beachten Sie, dass zu Ihrer Lösung zugehöriger Quellcode sowohl gedruckt abgegeben als
auch per Email an den entsprechenden Tutor gesendet werden muss!. Für zu implementierende
Programme/Funktionen sind stets auch Testaufrufe mit geeigneten Werten der Lösung beizufügen!
Aufgabe 1 (24 Punkte)
Berechnen (Rechenweg erforderlich!) Sie die freien und gebundenen Variablen des Ausdrucks.
let x = (\u -> u) x
f b = (\a -> a c)
in \w -> if x then g u else w (f 20)
Aufgabe 2 (12 Punkte)
Für diese Aufgabe ist die Verwendung von pattern-matching auf Listen verboten. Benutzen Sie
außer den fold-Funktionen möglichst keine anderen vordefinierten Funktionen auf Listen.
a) Geben Sie in Haskell mithilfe von foldl oder foldr eine Funktion an, die für eine Liste
von Zahlen prüft, ob sie mindestens eine Zahl enthält die größer als 50 ist.
(6 Punkte)
b) Geben Sie in Haskell mithilfe von foldl oder foldr eine Funktion an, die für eine Liste
von Zahlen prüft, ob alle Elemente größer als 50 sind.
(6 Punkte)
1
Aufgabe 3 (22 Punkte)
Ein häufiger Fehler beim Schreiben und Editieren von langen Texten besteht darin, dass manche
Wörter doppelt hintereinander vorkommen, wie z.B. in dem Text
Haskell is an advanced purely functional programming language. The product of more than twenty
years of cutting edge research, research it it allows rapid development of robust, concise, correct
software. With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries and an an active community, Haskell makes it easier to to
produce flexible, maintainable high-quality software.
a) Implementieren Sie in Haskell eine Funktion, die einen Text dahingehend prüft, ob doppelte
Wörter vorkommen, und dem entsprechend entweder True (doppelte Wörter kommen vor)
oder False als Ergebnis liefert.
(8 Punkte)
Hinweise: Verwenden Sie die vordefinierte Funktion words, die einen String1 in eine Liste
von Wörtern zerlegt.
b) Erweitern Sie die Funktionalität ihres Programms, so dass als Rückgabe kein Boolescher
Wert, sondern eine Liste aller doppelten Wörter zurück gegeben wird. Die Rückgabe für
obigen Beispieltext soll ["it","an","to"] sein.
(6 Punkte)
c) Da Satzzeichen, wie Kommata, Punkte, usw. die doppelte-Worte-Erkennung stören
können, passen Sie ihre Funktion aus dem vorherigen Aufgabenteil so an, dass zunächst
alle Satzzeichen (“.”, “,”, “!”, “?”, “;”, “:”) im Eingabetext mithilfe von map durch
Leerzeichen ersetzt werden. Das Programm sollte nun für den Beispieltext als Ergebnis
["research","it","an","to"] liefern.
(8 Punkte)
Aufgabe 4 (42 Punkte)
a) Definieren Sie in Haskell eine List Comprehension, die – gegeben eine Liste xs von Ganzzahlen – sowohl alle negativen als auch alle ungeraden Zahlen entfernt und die verbleibenden Zahlen halbiert. Z. B. lautet für die Liste xs = [-5,-2,0,1,3,4,5,6] das Ergebnis
[0,2,3].
(8 Punkte)
b) Eine Harshadzahl ist eine natürliche Zahl, die durch ihre Quersumme teilbar ist. Beispielsweise ist 777 eine Harshadzahl, da 7+7+7 = 21 und 777 = 21 * 37. Geben Sie eine List
Comprehension in Haskell an, die die Liste aller Harshadzahlen berechnet. (10 Punkte)
c) Definieren Sie in Haskell eine List Comprehension, die – gegeben eine Liste xs von Listen von Zahlen – alle Zahlen verdreifacht, jedoch die Struktur der Liste nicht ändert.
Z. B. lautet für xs =[[1,2],[3,6,9],[10]] das Ergebnis [[3,6],[9,18,27],[30]].
(10 Punkte)
d) Geben Sie eine List Comprehension in Haskell an, die die unendliche Liste aller Paare (a, b)
generiert, wobei a eine durch 5 teilbare Zahl und b eine ungerade Zahl ist. Die Elemente
sollen hierbei in einer fairen Reihenfolge generiert werden. Fair bedeutet: Jedes Element
wird in endlicher Zeit generiert, oder auch: Wenn xs die Liste der Paare ist, dann terminiert
(a,b) ‘elem‘ xs für alle a, b mit a durch 5 teilbar, b ungerade.
(14 Punkte)
1
In Haskell sind Strings nichts anderes als Listen von Zeichen
2
Herunterladen