Zum Inhalt springen

Funktionale Programmierung mit Haskell/ Module für Funktionen

Aus Wikibooks

Überblick

[Bearbeiten]

Bisher wurden nur einige wenige Funktionen wie sqrt und sum vorgestellt:

Dialog in ghci
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:

Dialog in ghci
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.