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