Els Tipus de Dades Algebraics (ADTs, per les seves sigles en anglès) són una característica fonamental en Haskell que permet definir tipus de dades complexos de manera clara i concisa. Els ADTs es divideixen principalment en dos tipus: tipus de dades producte i tipus de dades suma.
Tipus de Dades Producte
Els tipus de dades producte permeten agrupar diversos valors en una sola estructura. Un exemple comú és una tupla, però també podem definir els nostres propis tipus de dades producte utilitzant la paraula clau data.
Exemple: Definició d'un Punt en un Pla Cartesià
En aquest exemple, Point és un tipus de dades que conté dos valors de tipus Float. Podem crear un valor de tipus Point així:
Accés als Components
Per accedir als components d'un tipus de dades producte, podem utilitzar la coincidència de patrons:
Tipus de Dades Suma
Els tipus de dades suma permeten definir un tipus que pot ser un de diversos constructors diferents. Això és útil per representar dades que poden tenir diverses formes.
Exemple: Definició d'una Figura Geomètrica
En aquest exemple, Shape pot ser un Circle amb un Float que representa el radi, o un Rectangle amb dos Float que representen l'amplada i l'alçada.
Creació i Ús de Valors
Podem crear valors de tipus Shape així:
Coincidència de Patrons amb Tipus de Dades Suma
Podem utilitzar la coincidència de patrons per treballar amb valors de tipus Shape:
Tipus de Dades Recursius
Els ADTs també poden ser recursius, el que permet definir estructures de dades com llistes o arbres.
Exemple: Definició d'una Llista
En aquest exemple, List és un tipus de dades recursiu que pot ser Empty o Cons (un element seguit d'una altra llista).
Creació i Ús de Llistes
Podem crear valors de tipus List així:
Funció de Sumatori per a una Llista
Podem definir una funció per sumar els elements d'una List utilitzant la coincidència de patrons:
Exercicis Pràctics
Exercici 1: Definir un Tipus de Dades per a un Arbre Binari
Defineix un tipus de dades BinaryTree que pot ser un EmptyTree o un Node amb un valor i dos subarbres.
Exercici 2: Funció per Comptar Nodes
Escriu una funció countNodes que compti el nombre de nodes en un BinaryTree.
countNodes :: BinaryTree a -> Int countNodes EmptyTree = 0 countNodes (Node _ left right) = 1 + countNodes left + countNodes right
Exercici 3: Funció per Buscar un Valor
Escriu una funció search que busqui un valor en un BinaryTree.
search :: (Eq a) => a -> BinaryTree a -> Bool
search _ EmptyTree = False
search x (Node y left right)
| x == y = True
| otherwise = search x left || search x rightConclusió
Els Tipus de Dades Algebraics són una eina poderosa en Haskell per definir estructures de dades complexes de manera clara i concisa. Hem vist com definir tipus de dades producte, tipus de dades suma i tipus de dades recursius, així com com utilitzar la coincidència de patrons per treballar amb aquests tipus de dades. Amb aquests coneixements, estàs preparat per crear i manipular estructures de dades més avançades en Haskell.
