Informationen zum Einstieg in die Programmierung mit Haskell

Werbung
Informationen zum Einstieg in die Programmierung mit Haskell
22. Oktober 2010
Mit dieser kurzen Zusammenstellung wollen wir denjenigen von Euch, die bisher Haskell noch
nicht getestet haben, den ersten Umgang mit Haskell etwas erleichtern.
1. Die wichtigsten Interpreter bzw. Compiler/Interpreter sind GHC bzw. Hugs98. 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. Weitere Informationen dazu bzw. zu einigen anderen Entwicklungsumgebungen findet man
unter www.haskell.org/haskellwiki/IDEs. Man kann aber wirklich auch sehr gut mit
herkömmlichen Editoren (z.B. unter Windows mit notepad++ oder unter Linux mit gedit)
die Haskell-Programme erstellen.
Laden Sie eine Haskell-Implementierung von der Webseite www.haskell.org/haskell.
Gehen Sie dazu auf DownloadHaskell“, führen den Download (für den GHC ) durch und
”
installieren das Haskell-Paket.
Informationen zur Installation von Hugs98 finden Sie, wenn Sie auf Implementations gehen.
2. Ein Haskell-Programm besteht im einfachsten Fall aus ein oder mehreren Funktionsdefinitionen in Haskell-Syntax, die in einer Textdatei mit der Endung .hs bzw. .lhs 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.
1
Kommentare im Programm werden mit einem vorangestellten -- begonnen. Kommentare, die über mehrere Zeilen gehen, beginnen mit {- und enden mit -} . In Litera”
te Haskell“-Dateien, die die Datei-Endung .lhs haben, ist eine besondere Kennzeichnung von Kommentar nicht erforderlich, vielmehr wird dort der Haskell-Code kenntlich gemacht, z.B. dadurch, dass die Zeilen mit Haskell-Code mit > und einem Leerzeichen dahinter beginnen. Weitere Informationen zu Literate Haskell“ findet Ihr unter
”
http://www.haskell.org/haskellwiki/Literate_programming.
Wichtig: Im Haskell-Code sollte man die Verwendung der Tab-Funktion vermeiden, da sie
oft zu einer häufigen Fehlerquelle führt, dadurch dass die Layout-Regel“ nicht eingehalten
”
wird.
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.
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.
Unter http://fldit-www.cs.uni-dortmund.de/~peter/Haskellprogs/Painter.pdf sind
noch ergänzende Informationen enthalten.
2
Herunterladen