Les comprensions de llistes són una característica poderosa i elegant de Haskell que permet crear llistes noves a partir d'altres llistes de manera concisa i expressiva. En aquest tema, aprendrem com utilitzar les comprensions de llistes per manipular i generar llistes de manera eficient.
Conceptes Clau
- Sintaxi Bàsica de les Comprensions de Llistes
- Filtres en les Comprensions de Llistes
- Comprensions de Llistes amb Múltiples Generadors
- Exemples Pràctics
- Exercicis Pràctics
- Sintaxi Bàsica de les Comprensions de Llistes
La sintaxi bàsica d'una comprensió de llista és similar a la notació matemàtica dels conjunts. La forma general és:
On expressió
és l'element que es vol incloure a la nova llista, i generador
és una llista existent de la qual es prenen els elements.
Exemple Bàsic
-- Generar una llista dels quadrats dels nombres de l'1 al 5 squares = [x * x | x <- [1..5]] -- Resultat: [1, 4, 9, 16, 25]
- Filtres en les Comprensions de Llistes
Els filtres permeten incloure només aquells elements que compleixen una certa condició. La sintaxi és:
Exemple amb Filtre
-- Generar una llista dels quadrats dels nombres parells de l'1 al 10 evenSquares = [x * x | x <- [1..10], even x] -- Resultat: [4, 16, 36, 64, 100]
- Comprensions de Llistes amb Múltiples Generadors
Es poden utilitzar múltiples generadors per crear combinacions d'elements de diverses llistes. La sintaxi és:
Exemple amb Múltiples Generadors
-- Generar una llista de parells (x, y) on x és de l'1 al 3 i y és de l'1 al 2 pairs = [(x, y) | x <- [1..3], y <- [1..2]] -- Resultat: [(1,1), (1,2), (2,1), (2,2), (3,1), (3,2)]
- Exemples Pràctics
Exemple 1: Generar una llista de caràcters en majúscules
-- Convertir una llista de caràcters en minúscules a majúscules uppercase = [toUpper c | c <- "haskell"] -- Resultat: "HASKELL"
Exemple 2: Generar una llista de nombres primers
-- Funció per determinar si un nombre és primer isPrime n = null [x | x <- [2..n-1], n `mod` x == 0] -- Generar una llista de nombres primers fins a 20 primes = [x | x <- [2..20], isPrime x] -- Resultat: [2, 3, 5, 7, 11, 13, 17, 19]
- Exercicis Pràctics
Exercici 1: Generar una llista de cubs dels nombres de l'1 al 10
Descripció: Escriu una comprensió de llista que generi una llista dels cubs dels nombres de l'1 al 10.
-- Solució cubes = [x^3 | x <- [1..10]] -- Resultat esperat: [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Exercici 2: Generar una llista de parells (x, y) on x és de l'1 al 5 i y és de l'1 al 3, però només si x + y és parell
Descripció: Escriu una comprensió de llista que generi una llista de parells (x, y) on x és de l'1 al 5 i y és de l'1 al 3, però només inclou els parells on la suma de x i y és parell.
-- Solució evenSumPairs = [(x, y) | x <- [1..5], y <- [1..3], (x + y) `mod` 2 == 0] -- Resultat esperat: [(1,1), (1,3), (2,2), (3,1), (3,3), (4,2), (5,1), (5,3)]
Conclusió
Les comprensions de llistes són una eina molt potent en Haskell per crear i manipular llistes de manera concisa i expressiva. Hem vist com utilitzar la sintaxi bàsica, aplicar filtres i treballar amb múltiples generadors. A més, hem practicat amb alguns exemples i exercicis per reforçar els conceptes apresos. Amb aquesta base, estàs preparat per utilitzar comprensions de llistes en els teus propis projectes Haskell.