Funktionale Programmierung mit Haskell/ Module für Funktionen
Überblick
BearbeitenBisher wurden nur einige wenige Funktionen wie sqrt
und sum
vorgestellt:
Prelude> sqrt 16 -- Die Quadratwurzel-Funktion hat nur einen Operanden
4.0
Prelude> sum [1,2,3] -- Diese Summenfunktion bezieht sich auf eine Liste mit drei Werten
6
Diese Funktionen stehen von vornherein zur Verfügung. Das liegt daran, dass sie im Modul Prelude hinterlegt sind, das beim Aufruf des ghci automatisch herangezogen wird (daher auch der Ausdruck Prelude
vor dem Prompt).
Funktionen werden in Modulen gruppiert. Modulnamen werden groß geschrieben, und Module können mit einem Punkt (.) hierarchisch gegliedert werden. Beispielsweise gibt es ein Modul Data
, das u.a. für Datentypen zuständig ist und das sich in Module wie Data.Int
und Data.List
untergliedert, dort sind Funktionen zu finden, die auf Int-Typen bzw. auf Listen-Typen spezialisiert sind.
Es gibt weitere Module z.B. für Graphik, Ein- und Ausgabeoperationen oder Datumsverarbeitung. Im Literaturverzeichnis unter [6] wird auf eine umfangreiche Liste von Modulen verwiesen. Es lohnt sich zum besseren Verständnis von Haskell, diese Modul-Liste durchzustöbern und die dahinterliegenden Funktionen und Beispiele zu studieren.
Prelude ist also ein Modul, das die Funktionen sqrt
und sum
enthält, weil Sie häufig Verwendung finden. Andere, nur gelegentlich verwendete Funktionen sind ausgelagert, etwa die Suche nach einer Zufallszahl im Modul System.Random
hinterlegt ist. In ghci gibt es verschiedene Wege, diese Funktionen aufzurufen:
Prelude>System.Random.randomRIO (1,100)
55
Prelude> :modul System.Random
Prelude System.Random> randomRIO (1,100)
38
Prelude System.Random> :m Data.List Data.Binary Data.Time
Prelude Data.List Data.Binary Data.Time> :m - Data.Time
Prelude Data.List Data.Binary>
Erläuterung: Bei der ersten Ermittlung einer Zufallszahl zwischen eins und hundert wird in der Eingabezeile auf das Modul referenziert. Danach wird das Modul System.Random
direkt bereitgestellt, d. h. die Funktionen dieses Moduls sind nun zusammen mit den Funktionen aus Prelude
direkt an der Eingabezeile nutzbar. Dies wird auch am Prompt deutlich gemacht, der nun auch den Namen des zweiten Moduls enthält. Die nächste Zeile beweist, dass mit :m beliebige weitere Moudule hinzugeladen werden können, sogar das Entfernen von Modulen mit :m -
ist kein Problem.
Soviel zur Verwendung von Modulen im interaktiven Modus. Die Verwendung in Programmen sowie das Schreiben eigener Module ist Thema eines späteren Kapitels.