La coincidència de patrons és una característica poderosa i fonamental en Haskell que permet descompondre estructures de dades de manera clara i concisa. Aquesta tècnica és àmpliament utilitzada per definir funcions, treballar amb llistes, tuples i altres tipus de dades.
Conceptes Clau
- Patrons Simples: Coincidència amb valors literals.
- Patrons de Llistes: Coincidència amb estructures de llistes.
- Patrons de Tuples: Coincidència amb tuples.
- Patrons de Constructors: Coincidència amb constructors de tipus de dades algebraics.
- Patrons amb Variables: Assignació de parts de l'estructura a variables.
- Patrons Simples
Els patrons simples coincideixen amb valors literals. Per exemple:
En aquest exemple, la funció esZero
retorna True
si l'entrada és 0
i False
per a qualsevol altre valor.
- Patrons de Llistes
La coincidència de patrons amb llistes permet descompondre llistes en els seus components:
Aquí, la funció llargada
calcula la longitud d'una llista. Si la llista és buida ([]
), retorna 0
. Si la llista té almenys un element (_:xs
), incrementa el comptador i crida recursivament a llargada
amb la resta de la llista (xs
).
- Patrons de Tuples
La coincidència de patrons amb tuples permet descompondre tuples en els seus components:
En aquest exemple, la funció sumaTupla
pren una tupla de dos enters i retorna la seva suma.
- Patrons de Constructors
Els constructors de tipus de dades algebraics també poden ser utilitzats en la coincidència de patrons:
data Color = Vermell | Verd | Blau esVermell :: Color -> Bool esVermell Vermell = True esVermell _ = False
Aquí, esVermell
retorna True
si l'entrada és Vermell
i False
per a qualsevol altre valor de Color
.
- Patrons amb Variables
Les variables en patrons permeten capturar parts de l'estructura de dades:
En aquest exemple, primerElement
retorna Nothing
si la llista és buida, i Just x
si la llista té almenys un element, on x
és el primer element de la llista.
Exercicis Pràctics
Exercici 1: Coincidència de Patrons amb Llistes
Defineix una funció capICua
que retorni una tupla amb el primer i l'últim element d'una llista. Si la llista és buida, retorna Nothing
.
capICua :: [a] -> Maybe (a, a) capICua [] = Nothing capICua [x] = Just (x, x) capICua (x:xs) = Just (x, last xs)
Exercici 2: Coincidència de Patrons amb Constructors
Defineix un tipus de dades Forma
amb constructors Cercle
i Rectangle
. Escriu una funció area
que calculi l'àrea d'una Forma
.
data Forma = Cercle Float | Rectangle Float Float area :: Forma -> Float area (Cercle r) = pi * r * r area (Rectangle a b) = a * b
Resum
La coincidència de patrons és una eina poderosa en Haskell que permet descompondre estructures de dades de manera clara i concisa. Hem vist com utilitzar patrons simples, de llistes, de tuples, de constructors i amb variables. A més, hem practicat amb exercicis per reforçar aquests conceptes.
En el següent tema, explorarem els Guards, una altra característica important per definir funcions de manera més expressiva.