Einige Informationen zur Funktionalen Programmierung mit Haskell

Werbung
Einige Informationen zur Funktionalen
Programmierung mit Haskell
17. Oktober 2007
Mit dieser kurzen Zusammenstellung wollen wir Euch den Einstieg in die Funktionale
Programmierung etwas erleichtern.
Vorlesung
Die Vorlesung findet mit Beginn des Semesters 14-tägig jeweils am Freitag von 14:15 bis
15:45 Uhr im Gebäude OH14, Hörsaal 23 statt. Der erste Vorlesungstermin ist der 19.
Oktober. Alle Informationen zur Vorlesung sind auch auf der Seite
http://funlog.padawitz.de/fpba.html
verfügbar. Die Übungszettel und eine kurze Übersicht über die in der Vorlesung behandelten Inhalte findet Ihr unter
http://www-ai.cs.uni-dortmund.de/LEHRE/VORLESUNGEN/FP/
Leistungsnachweis Für einen Leistungsnachweis zu dieser Vorlesung ist eine erfolgreiche Teilnahme an den Übungen erforderlich. Es wird im Semester 14 Übungsblätter
geben, je Übungsblatt werden 100 Punkte vergeben. Die erfolgreiche Teilnahme bedeutet
ein Erreichen von mindestens 60% aller Punkte der ersten 7 Blätter und 60% aller Punkte
der übrigen 7 Übungszettel.
Übungen
Die Anmeldung zu den Übungen erfolgt zu Beginn des ersten Vorlesungstermins, die
Einteilung in die Übungsgruppen wird nach der Vorlesung zeitnah auf der Homepage
veröffentlicht.
Die Übungszettel sind jeden Freitag ab 16 Uhr auf der Homepage zur Vorlesung verfügbar.
Die Abgabe der Übungszettel ist bis zum darauf folgenden Freitag um 14 Uhr per E-Mail
an den Übungsgruppenleiter möglich. Bitte achtet darauf, Eure Abgaben in Form einer
einfachen Text-Datei (ASCII) als Anhang zu senden.
Programmiersprache Haskell
In der Veranstaltung wird die funktionale Programmiersprache Haskell behandelt. Die
wichtigsten Interpreter bzw. Compiler/Interpreter sind Hugs98 bzw. GHC, die von der
Webseite www.haskell.org (dort dann dem Link Implementations folgen) heruntergeladen
1
werden können. Beide stehen für die gängigen Rechnerwelten (Windows, Mac und Linux)
zur Verfügung. Unter Windows gibt es für Hugs98 eine einfache Entwicklungsumgebung
winhugs, die in der Download-Version bereits enthalten ist. Für den GHC existiert ein
Eclipse-PlugIn bzw. kann eine Version für Visual Studio heruntergeladen werden. Weitere
Informationen dazu findet man unter www.haskell.org/haskellwiki/IDEs .
Ein Haskell-Programm besteht im einfachsten Fall aus ein oder mehreren Funktionsdefinitionen in Haskell-Syntax, die in einer Textdatei mit der Endung .hs gespeichert werden.
Die Ausführung eines solchen Programms erfolgt dann (z.B.) dadurch, dass nach dem
Start des Haskell-Interpreters diese Datei geladen wird und die definierte Funktion auf
Argumente der passenden Form angewandt wird.
Beispiel 1 Speichert man den folgenden ASCII-Text
fak :: Integer -> Integer
fak 0 = 1
fak n = n * (fak (n-1))
in einer Textdatei namens factorial.hs, so wird dadurch ein Haskell-Programm erzeugt,
das bei Anwendung der Funktion fak auf eine ganze Zahl n ≥ 0 den Wert n! berechnet.
Die Ausführung des Programms geschieht dabei in der folgenden Form:
Bei Verwendung eines Interpreters hugs (winhugs) oder ghci wird mit der Eingabe
:l factorial.hs
die Datei factorial.hs geladen, danach wird mit dem Aufruf von z.B.
fak 100
die Fakultät von 100 berechnet.
In einfachen Fällen ist die im Beispiel beschriebene Vorgehensweise ausreichend. Sobald
die Eingaben oder Ausgaben des Programms umfangreicher werden, empfiehlt es sich,
jeweils Ein- und Ausgabedateien anzulegen, die vom Programm verwendet werden. Man
kann sich dabei eine schöne Eigenschaft von Haskell zu Nutze machen: die read-Funktion,
die einen String einliest, kann so angepasst werden, dass das Ergebnis des Einlesens vom
passenden Typ ist.
Beispiel 2 Die Definition der Konstanten (0-stelligen Funktion) x durch
x = read "12345":: Integer
hat als Ergebnis die Integer-Konstante x = 12345,
während die Festlegung
x = read "0.12345":: Float
als Ergebnis die Dezimalzahl-Konstante x = 0.12345 hat.
Das Einlesen eines Wertes aus einer Datei geschieht dabei unter Verwendung von readFile,
das Schreiben in eine Datei mit dem Befehl writeFile.
2
Beispiel 3 Wir definieren eine Funktion test durch
test datei = do x <- readFile datei
print (read x :: Int)
Existiert dann eine Datei mit Namen dat” mit Inhalt 4321, so führt der Aufruf
”
test "dat"
zur Ausgabe 4321.
Der Aufruf von
writeFile "dat"(show 2.8)
bewirkt, dass der Wert 2.8 in die Datei dat” geschrieben wird. show wandelt dabei die
”
Dezimalzahl 2.8 in einen String um.
Falls im Rahmen der Übungen kompliziertere Lese- und Schreiboperationen anfallen, so
werden hierzu entsprechende Informationen rechtzeitig zur Verfügung gestellt.
Auf den Webseiten von Herrn Padawitz findet man unter
http://funlog.padawitz.de/fpba.html
eine sehr empfehlenswerte Vorgehensweise beschrieben, die die hier am Einzelfall dargestellten Lese- und Schreiboperationen so organisiert, dass man nicht mehr für jede neue
Aufgabenstellung diese implementieren muss.
3
Herunterladen