2025
Intervalos Programación Lógica y Funcional
Introducción
- Es importante recordar que en los lenguajes funcionales, las funciones devuelven siempre el mismo valor.
- Los lenguajes funcionales puros tienen la propiedad de transparencia referencial, como consecuencia, en programación funcional, una función siempre devuelve el mismo valor cuando se le llama con los mismos parámetros
- Las funciones no modifican ningún estado, no acceden a ninguna variable ni objeto global y no modifican su valor.
- En programación funcional pura una vez declarada una variable no se puede modificar su valor.
- En algunos lenguajes de programación (como Scala) este concepto se refuerza definiendo la variable como inmutable (con la directiva val).
- En cambio, en programación imperativa es habitual modificar el valor de una variable en distintos pasos de ejecución.
Intervalos
- Las funciones en Haskell se definen en dos partes.:
- La primera identifica el nombre, el dominio y el intervalo de la función.
- La segunda describe el significado de la función.
Listas
- Una lista es una colección ordenada de valores. Todos los elementos de una lista deben ser del mismo tipo (inclusive pueden existir listas de listas).
- Las listas son la estructura de datos básica en Haskell (y en la mayoría de lenguajes funcionales).
- No solo sirven para almacenar datos, sino que son un elemento fundamental en el diseño de algoritmos.
- Una lista es un par (x : xs) donde x es el primer elemento de la lista y xs la (sub)lista que contiene el resto de los elementos.
- La lista vacía se simboliza [].
- La lista formada por los enteros 1 al 5 sería: [1, 2, 3, 4, 5] ó [1..5] ó [1, 2, ..5].
- En Haskell la sublista puede estar indicada por una expresión y por el mecanismo de evaluación diferida esto posibilita el poder definir (y usar) listas infinitas.
- Las listas se almacenan internamente en un formato no evaluado.
Funciones predefinidas con listas
- Acceso a primer (head) y último (last) elemento, lista sin primer elemento (tail) y sin último elemento (init):
- Longitud (length), elementoi-ésimo(!!), concatenar (++):
- Sublistas: Obtener primeros n elementos (take), quitar primeros n elementos, obtener y quitar mientras se cumpla una condición:
Ejemplos
Listas Enumeradas
- Todo tipo de datos que pertenezca a la clase Enum tiene definidas funciones (enumFrom, etc.) para generar rangos de valores. Existe una sintaxis especial para crear listas basadas en esos rangos:
- [1..10] --> [1,2,3,4,5,6,7,8,9,10]
- ['a'..'z'] --> "abcdefghijklmnopqrstuvwxyz"
- [1,3..10] --> [1,3,5,7,9]
- [1..] --> [1,2,3,...] Lista infinita!
Es posible crear listas infinitas porque Haskell tiene evaluación diferida. Si una operación sólo trabaja sobre una parte de la lista, no existe ningún problema:
Otras funciones: Zip, ZipWith combinan dos listas en una sola (lista depares o lista basada en operaciones sobre los pares).
Map, Filter, Folder
- Existe un grupo de funciones sobre listas (tipicamente se denomina map-filter-reduce) que se han mostrado extremadamente útiles en la resolución de gran cantidad de problemas:
- Map aplica una misma operación (unaria) sobre todos los elementos de una lista, devolviendo la lista modificada.
- Filter crea otra lista extrayendo sólo los elementos que cumplan una condición.
- Folder (Reduce) "colapsa" una lista aplicando una operación binaria que consume un elemento más y el resultado del colapso actual.
1. Map
- Recibe una función que transforma valores de tipo a en valores de tipo b y una lista de a's, y devuelve una lista de b's: La lista original aplicando la función a todos los valores.
- Ejemplos (show es la función que traduce un valor a cadena):
Ejemplos
- Si intentamos aplicar map directamente a una matriz (una lista de listas) obtenemos un error:
- El problema es que los elementos de la lista son a su vez listas, y no tiene sentido el sumar 1 a una lista.
- Lo que si podemos aplicar a cada elemento (lista) es la operación de aplicar (map) el incremento:
2. Filter
- Recibe un predicado y una lista de valores y devuelve la lista a la que sólo pertenecen los valores que cumplan el predicado:
- Ejemplo: lista infinita de primos. (usando la función esPrimo1):
Ejemplos
- Función que devuelve el número de veces que se encuentra un elemento en una lista:
- Lista de primos menores que lim.: usando el método de la Criba de Eratóstenes (filtrar múltiplos de primos):
3. Folder
- Folder colapsa una lista de a's en un único valor de tipo b (que tipicamente suele ser a). Para ello va consumiendo elementos de la lista y les aplica un operador binario junto con un valor acumulado, que al final será el resultado.
- Existen variantes que depende de como se consuman los elementos (izda dcha o al revés) y si se da un valor inicial o no.
- Puede ser util visualizarlo como la sustitución del operador constructor de listas, : , por el operador (lo denotamos como ) indicado.
Ejemplos
- Suma de los elementos de una lista:
- Comprobar si un elemento pertenece a una lista:
¡GRACIAS!
2025
Copia - 2.1.3 Intervalos
TECNOLOGICO NACIONAL DE MÉXICO
Created on September 10, 2025
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Interactive Hangman
View
Secret Code
View
Branching Scenario: Academic Ethics and AI Use
View
The Fortune Ball
View
Repeat the Sequence Game
View
Pixel Challenge
View
Word Search: Corporate Culture
Explore all templates
Transcript
2025
Intervalos Programación Lógica y Funcional
Introducción
Intervalos
Listas
Funciones predefinidas con listas
Ejemplos
Listas Enumeradas
Es posible crear listas infinitas porque Haskell tiene evaluación diferida. Si una operación sólo trabaja sobre una parte de la lista, no existe ningún problema: Otras funciones: Zip, ZipWith combinan dos listas en una sola (lista depares o lista basada en operaciones sobre los pares).
Map, Filter, Folder
1. Map
Ejemplos
2. Filter
Ejemplos
3. Folder
Ejemplos
¡GRACIAS!
2025