Zu den folgenden Ausführungen kann die Druckversion eines Vortrages als pdf-Datei ausgedruckt werden:
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.
[] -- 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)
[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]
(:) :: 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
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]