Funktionale Programmierung mit Haskell - Listcomprehensions
Hier zeige ich dir einige Beispiele, wie du Listcomprehensions in Haskell verwenden kannst.
Kreuzprodukt
Wir schreiben eine Funktion, welche die Elemente aus zwei Listen so kombiniert, dass alle möglichen Kombinationen (a,b) mit a aus der ersten Liste und b aus der zweiten Liste entstehen.
kreuzprodukt :: [a] -> [b] -> [(a, b)] kreuzprodukt listeA listeB = [(a, b) | a <- listeA, b <- listeB]
Geordnete Paare
geordnetePaare :: [Integer] -> [(Integer, Integer)] geordnetePaare liste = [(x, y) | x <- liste, y <- liste, x <= y]
Zusammenhängen
Wir schreiben eine Funktion zusammenhaengen, die eine Liste von Listen zu einer zusammenhängenden Liste umwandelt.
zusammenhaengen :: [[a]] -> [a] zusammenhaengen liste = [x | subListe <- liste, x <- liste]
Zweite Element aus einer Liste von Tupeln
Wir wollen eine Funktion schreiben, die aus einer Liste von Tupeln (a, b) den Wert b nimmt und in eine neue Liste schreibt.
zweite :: [(a, b)] -> [b] zweite liste = [b | (a, b) <- liste]
Durch sieben teilbar
Wir schrieben eine Funktion, die alle Elemente, die durch 7 teilbar sind, herausfiltert.
teilbar7 :: [a] -> [a] teilbar7 liste = [a | a <- liste, (mod a 7) == 0]
Teiler
Wir schreiben eine Funktion, die zu einer gegebenen Zahl alle Teiler berechnet.
teiler :: Integer -> [Integer] teiler n = [x | x <- [1..n], (mod n x) == 0]
Primzahlen
Wir schreiben eine Funktion, die alle Primzahlen bis zu einer Zahl n wiedergibt.
primzahlen :: Integer -> [Integer] primzahlen n = [x | x <- [1..n], length(teiler x) == 2]
Sortiert
Wir schreiben eine Funktion, die prüft, ob eine Liste sortiert ist. Als sortiert gilt eine Liste, wenn die Liste aufsteigend geordnet ist.
sortiert :: [Num a] => [a] -> Bool sortiert [] = True sortiert (x:xs) = length([a | a <- xs, a < h]) == 0 && sortiert xs