Listen sind die zentrale Datenstruktur: [1, 2, 3], Bereiche [1..10], Doppelpunkt x : xs fügt vorne an. Funktionen höherer Ordnung wie map, filter, foldr, zip verarbeiten Listen ohne Schleifen. Listenausdrücke ([x * 2 | x <- xs, even x]) lesen sich wie Mathematik.
Haskell wertet lazy (faul) aus: Werte werden erst berechnet, wenn sie gebraucht werden. So sind sogar unendliche Listen möglich.
main :: IO ()
main = do
let zahlen = [5, 2, 9, 4]
print (map (* 2) zahlen) -- [10,4,18,8]
print (filter even zahlen) -- [2,4]
print (sum zahlen, maximum zahlen) -- (20,9)
print [x * x | x <- [1 .. 10], even x]
print (take 5 [1 ..]) -- unendliche Liste, nur 5 genommen
print (zip [1, 2, 3] "abc")Merke
map,filter,foldrersetzen Schleifen- Listenausdrücke
[x | x <- xs, bedingung] - Lazy Evaluation: Werte erst bei Bedarf
Aufgabe
Bilde die Summe aller Quadratzahlen von 1 bis 20 mit einem Listenausdruck.