En este tema, exploraremos tres funciones fundamentales en la programación funcional: map
, filter
y fold
. Estas funciones son herramientas poderosas para manipular listas y otras estructuras de datos en Haskell.
Map
La función map
aplica una función a cada elemento de una lista, produciendo una nueva lista con los resultados.
Sintaxis
Ejemplo
-- Definimos una función que suma 1 a un número increment :: Int -> Int increment x = x + 1 -- Usamos map para aplicar 'increment' a cada elemento de la lista result = map increment [1, 2, 3, 4, 5] -- result será [2, 3, 4, 5, 6]
Explicación
increment
es una función que toma un entero y devuelve ese entero incrementado en 1.map increment [1, 2, 3, 4, 5]
aplicaincrement
a cada elemento de la lista[1, 2, 3, 4, 5]
, produciendo[2, 3, 4, 5, 6]
.
Filter
La función filter
selecciona elementos de una lista que cumplen con un predicado (una función que devuelve True
o False
).
Sintaxis
Ejemplo
-- Definimos una función que verifica si un número es par isEven :: Int -> Bool isEven x = x `mod` 2 == 0 -- Usamos filter para seleccionar solo los números pares de la lista result = filter isEven [1, 2, 3, 4, 5, 6] -- result será [2, 4, 6]
Explicación
isEven
es una función que toma un entero y devuelveTrue
si el entero es par.filter isEven [1, 2, 3, 4, 5, 6]
selecciona solo los elementos de la lista[1, 2, 3, 4, 5, 6]
que son pares, produciendo[2, 4, 6]
.
Fold
La función fold
(también conocida como reduce
en otros lenguajes) combina los elementos de una lista usando una función binaria y un valor inicial.
Sintaxis
Hay dos variantes principales de fold
en Haskell: foldl
(fold left) y foldr
(fold right).
Ejemplo con foldl
-- Definimos una función que suma dos números add :: Int -> Int -> Int add x y = x + y -- Usamos foldl para sumar todos los elementos de la lista result = foldl add 0 [1, 2, 3, 4, 5] -- result será 15
Ejemplo con foldr
-- Definimos una función que suma dos números add :: Int -> Int -> Int add x y = x + y -- Usamos foldr para sumar todos los elementos de la lista result = foldr add 0 [1, 2, 3, 4, 5] -- result será 15
Explicación
add
es una función que toma dos enteros y devuelve su suma.foldl add 0 [1, 2, 3, 4, 5]
combina los elementos de la lista[1, 2, 3, 4, 5]
usandoadd
, comenzando con el valor inicial0
. El proceso es:((((0 + 1) + 2) + 3) + 4) + 5
.foldr add 0 [1, 2, 3, 4, 5]
combina los elementos de la lista[1, 2, 3, 4, 5]
usandoadd
, comenzando con el valor inicial0
. El proceso es:1 + (2 + (3 + (4 + (5 + 0))))
.
Ejercicios Prácticos
Ejercicio 1: Uso de map
Problema: Dada una lista de enteros, usa map
para crear una nueva lista donde cada elemento es el cuadrado del elemento original.
Solución:
square :: Int -> Int square x = x * x squaredList = map square [1, 2, 3, 4, 5] -- squaredList será [1, 4, 9, 16, 25]
Ejercicio 2: Uso de filter
Problema: Dada una lista de enteros, usa filter
para crear una nueva lista que contenga solo los números mayores que 3.
Solución:
greaterThanThree :: Int -> Bool greaterThanThree x = x > 3 filteredList = filter greaterThanThree [1, 2, 3, 4, 5, 6] -- filteredList será [4, 5, 6]
Ejercicio 3: Uso de fold
Problema: Dada una lista de enteros, usa foldl
para calcular el producto de todos los elementos de la lista.
Solución:
multiply :: Int -> Int -> Int multiply x y = x * y productOfList = foldl multiply 1 [1, 2, 3, 4, 5] -- productOfList será 120
Resumen
En esta sección, hemos aprendido sobre tres funciones fundamentales en Haskell: map
, filter
y fold
. Estas funciones nos permiten transformar y combinar listas de manera concisa y expresiva. Asegúrate de practicar con los ejercicios proporcionados para reforzar tu comprensión de estos conceptos. En el próximo módulo, exploraremos más sobre las expresiones lambda y cómo pueden ser utilizadas en combinación con estas funciones.
Curso de Programación en Haskell
Módulo 1: Introducción a Haskell
- ¿Qué es Haskell?
- Configuración del Entorno de Haskell
- Sintaxis Básica y Hola Mundo
- Haskell REPL (GHCi)