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

  1. Sintaxi Bàsica de les Comprensions de Llistes
  2. Filtres en les Comprensions de Llistes
  3. Comprensions de Llistes amb Múltiples Generadors
  4. Exemples Pràctics
  5. Exercicis Pràctics

  1. 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:

[expressió | generador]

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]

  1. Filtres en les Comprensions de Llistes

Els filtres permeten incloure només aquells elements que compleixen una certa condició. La sintaxi és:

[expressió | generador, condició]

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]

  1. Comprensions de Llistes amb Múltiples Generadors

Es poden utilitzar múltiples generadors per crear combinacions d'elements de diverses llistes. La sintaxi és:

[expressió | generador1, generador2, ..., generadorN]

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)]

  1. 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]

  1. 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.

© Copyright 2024. Tots els drets reservats