Impressum | Kontakt
 Startseite | Kurse Projekte | Haskell | Fortbildungen | Linux | Suche

Listen in Haskell

Zu den folgenden Ausführungen kann die Druckversion eines Vortrages als pdf-Datei  ausgedruckt werden:

Startet den Datei-DownloadListen in Haskell (pdf)

Listen sind in Haskell rekursiv definiert:

Eine Liste ist entweder leer
oder sie enthält ein erstes Element und eine Restliste.

Listen können alle möglichen Datentypen als Elemente haben, aber alle Elemente müssen denselben Typ haben. Sehr viele Listenfunktionen sind polymorph, d.h., sie funktionieren mit allen Listen und sind nicht an einen Typ gebunden.

Listendarstellung:

  [] -- leere Liste
  [element] -- Liste mit einem Element
  (x:y:xs) -- Liste mit mindestens 2 Elementen
  (x:xs) -- nicht leere Liste (1. Element x, Restliste xs)

 

Beispiele:


  [1,3,5]
  ['H','a','l','l','o'] = "Hallo"
  ["Hans","hat","Durst"]
  (3>5):[True, False] = [False, True, False]
  5^2 : 4^2 : 3^2 : 2^2 : [] = [25,16,9,4]

 

Überblick über einige vordefinierte Listenfunktionen:


  (:)     ::  a   -> [a] -> [a] -- "cons": ein Element vorsetzen
  head    :: [a]  ->  a         -- Kopf einer Liste
  last    :: [a]  ->  a         -- letztes Element einer Liste
  tail    :: [a]  -> [a]        -- Rest einer Liste (ohne 1. Element)
  init    :: [a]  -> [a]        -- Anfang einer Liste (ohne letztes Element)
  null    :: [a]  -> Bool       -- leere Liste ?
  (++)    :: [a]  -> [a] -> [a] -- Verkettung von 2 Listen
  concat  :: [[a]]-> [a]        -- Verketten vieler Listen
  length  :: [a]  -> Int        -- Länge einer Liste
  (!!)    :: [a]  -> Int -> a   -- Zugriff auf ein inneres Element
  reverse :: [a]  -> [a]        -- Liste in umgekehrter Reihenfolge

 

High-Order-Function

Besonders interessant sind die beiden Funktionen map und filter, die eine Funktion auf alle Elemente einer Listeanwenden.

Bei der map-Funktion bleibt die Anzahl der Elemente unverändert. Die Funktion f wird auf alle Elemente der Liste angewandt; dadurch kann sich der Datentyp ändern.

map (^2) [1..10]  -- Berechnet die Quadratzahlen

Bei der Filterfunktion wird ein Teil selektiert, d. h. die Anzahl verringert sich in der regel, der Datentyp bleibt aber erhalten.

filter prim [x..100]  -- filtert die Primzahlen heraus
prim n= [x|x<-[2..n],mod n x == 0] == [n]