En este tema, aprenderemos sobre dos estructuras de datos fundamentales en Haskell: las listas y las tuplas. Estas estructuras son esenciales para manejar colecciones de datos y son ampliamente utilizadas en la programación funcional.

Listas

Las listas en Haskell son colecciones ordenadas de elementos del mismo tipo. Son una de las estructuras de datos más comunes y versátiles en Haskell.

Creación de Listas

Puedes crear listas de varias maneras:

-- Lista vacía
emptyList = []

-- Lista de números
numbers = [1, 2, 3, 4, 5]

-- Lista de caracteres (cadena de texto)
hello = ['H', 'e', 'l', 'l', 'o']

Operaciones Básicas con Listas

Acceso a Elementos

Puedes acceder a los elementos de una lista usando el operador !!:

-- Acceder al primer elemento (índice 0)
firstElement = numbers !! 0  -- Resultado: 1

-- Acceder al tercer elemento (índice 2)
thirdElement = numbers !! 2  -- Resultado: 3

Concatenación de Listas

Puedes concatenar dos listas usando el operador ++:

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combinedList = list1 ++ list2  -- Resultado: [1, 2, 3, 4, 5, 6]

Agregar Elementos

Puedes agregar un elemento al inicio de una lista usando el operador : (cons):

newList = 0 : numbers  -- Resultado: [0, 1, 2, 3, 4, 5]

Funciones Comunes para Listas

Haskell proporciona muchas funciones útiles para trabajar con listas. Aquí hay algunas de las más comunes:

  • head: Devuelve el primer elemento de una lista.
  • tail: Devuelve la lista sin el primer elemento.
  • length: Devuelve la longitud de una lista.
  • null: Verifica si una lista está vacía.
  • reverse: Invierte una lista.
-- Ejemplos de uso
first = head numbers       -- Resultado: 1
rest = tail numbers        -- Resultado: [2, 3, 4, 5]
len = length numbers       -- Resultado: 5
isEmpty = null numbers     -- Resultado: False
reversed = reverse numbers -- Resultado: [5, 4, 3, 2, 1]

Tuplas

Las tuplas son colecciones de un número fijo de elementos, que pueden ser de diferentes tipos. A diferencia de las listas, las tuplas no tienen que ser homogéneas.

Creación de Tuplas

Puedes crear tuplas simplemente agrupando elementos entre paréntesis:

-- Tupla de dos elementos
pair = (1, "one")

-- Tupla de tres elementos
triple = (1, "one", True)

Acceso a Elementos de Tuplas

Para acceder a los elementos de una tupla, puedes usar patrones de coincidencia:

-- Desempaquetar una tupla de dos elementos
(a, b) = pair  -- a = 1, b = "one"

-- Desempaquetar una tupla de tres elementos
(x, y, z) = triple  -- x = 1, y = "one", z = True

Funciones Comunes para Tuplas

Haskell proporciona algunas funciones útiles para trabajar con tuplas, especialmente para tuplas de dos elementos:

  • fst: Devuelve el primer elemento de una tupla de dos elementos.
  • snd: Devuelve el segundo elemento de una tupla de dos elementos.
-- Ejemplos de uso
firstElement = fst pair  -- Resultado: 1
secondElement = snd pair -- Resultado: "one"

Ejercicios Prácticos

Ejercicio 1: Manipulación de Listas

Escribe una función sumFirstTwo que tome una lista de números y devuelva la suma de los dos primeros elementos. Si la lista tiene menos de dos elementos, la función debe devolver 0.

sumFirstTwo :: [Int] -> Int
sumFirstTwo (x:y:_) = x + y
sumFirstTwo _ = 0

Ejercicio 2: Manipulación de Tuplas

Escribe una función swap que tome una tupla de dos elementos y devuelva una nueva tupla con los elementos intercambiados.

swap :: (a, b) -> (b, a)
swap (x, y) = (y, x)

Soluciones

Solución al Ejercicio 1

sumFirstTwo :: [Int] -> Int
sumFirstTwo (x:y:_) = x + y
sumFirstTwo _ = 0

Solución al Ejercicio 2

swap :: (a, b) -> (b, a)
swap (x, y) = (y, x)

Conclusión

En esta sección, hemos aprendido sobre las listas y las tuplas en Haskell, dos estructuras de datos fundamentales. Las listas son colecciones ordenadas de elementos del mismo tipo, mientras que las tuplas son colecciones de un número fijo de elementos que pueden ser de diferentes tipos. Hemos visto cómo crear, manipular y acceder a elementos en ambas estructuras, y hemos practicado con algunos ejercicios.

En el próximo módulo, profundizaremos en los fundamentos de la programación funcional, explorando conceptos como funciones de orden superior y expresiones lambda. ¡Sigue adelante!

© Copyright 2024. Todos los derechos reservados