Académique Documents
Professionnel Documents
Culture Documents
INTRODUCCIÓN
Existen dos grandes Paradigmas de Programación:
PROGRAMACIÓN FUNCIONAL
RECURSIVIDAD
1
• NO existe el concepto de paso de parámetro por referencia. Este hecho determina que ninguna
variable pasada como argumento puede modificar su valor.
• NO existen efectos laterales, ya que el concepto de variable global es inexistente.
• Las funciones son de orden superior, es decir, pueden ser pasadas como parámetro a otra
función, devueltas como resultado o incluso almacenadas en estructuras de datos.
LISTA
TIPOS
SIMPLES
• Bool
- Dominio: [False, True]
- Operadores: &&, ||, not
• Char
- Ej.: ’j’, ‘*’, ‘\n’, etcétera
- Operadores: ord, chr, isUpper, isDigit, toLower, toUpper, etcétera
- Nota: Es preciso importar el paquete “Data.Char” para utilizar las funciones especiales
anteriormente citadas
• Int & Integer (entero largo)
- Ej: 1, 684, -7, etcétera
- Operadores: +, -, *, `div`, `mod`, `rem`, abs, negate, even (par), odd (impar), etcétera
• Float & Double
- Ej.: 5.75, 5.75e7 (científica)
- Operadores: +, -, *, /, abs, truncate, round, floor, ceiling, etcétera
• String
- Ej.: “Julio Iglesias”, “Me va”, etcétera
COMPUESTOS
• Listas: [T]
• Tuplas: (T1, T2, …, Tn)
• Funciones (notación currificada)
2
OPERADORES DE COMPARACIÓN
• ==, /=, <, <=, >, >=
EXPRESIONES CONDICIONALES
• if - then - else
- Nota: La rama “else” es obligatoria
• case
- Nota: Admite no sólo variables, si no también expresiones
• guardas
LISTAS
Se pueden crear:
• Enumerando elementos
• Declarando expresiones
• Mediante abreviaturas
• Mediante el operador de adición “:” (asociativo por la derecha)
OPERADORES
• lista1 ++ lista2: concatenación binaria
• concat [lista1, lista2, lista3, …]: concatenación múltiple
• reverse lista: invierte los elementos de una lista
• length lista: devuelve el número de elementos de una lista
• head: lista: devuelve el elemento cabecera de la lista
• tail lista: devuelve el resto de la lista
• last lista: devuelve el último elemento de la lista
• init lista: devuelve todos los elementos de la lista salvo el último
• take n lista: devuelve una lista con los n primeros elementos
• drop n lista: devuelve una lista eliminando los n primeros elementos
• lista !! índice: devuelve el elemento que ocupa la posición “índice” de la lista
• zip lista1 lista2: devuelve una lista con las parejas de elementos (1 a 1) de ambas listas
• unzip lista_de_parejas: devuelve dos listas separando los elementos previamente
“comprimidos”
Permiten generar listas de forma concisa. Es una forma de crear listas a caballo entre la
declaración de expresiones y el uso de simplificaciones o abreviaturas.
GENERADORES
3
FILTROS
PATRONES O REGLAS
Se pueden emplear patrones o reglas para definir las funciones en lugar de utilizar expresiones
condicionales.
Ej:
Danger! Danger!
• Patrones constantes
• Patrones para listas y tuplas
• Patrones aritméticos
• Patrones nombrados (identificador@expresión): simplificación en la parte derecha
• Patrón subrayado (_): es un identificador anónimo usado cuando un parámetro no tiene
relevancia en la parte de la derecha (para cualquier otra cosa)
DEFINICIONES LOCALES
En caso de que una expresión se repita varias veces, y ello conlleve su evaluación múltiple, se
pueden utilizar definiciones locales para ganar eficiencia o funciones auxiliares.
LET
WHERE
expresión
where
variable = valor
FUNCIONES
• Recursividad
• Orden Superior
• Sobre listas:
• map f xs: devuelve la lista resultante de aplicar la función “f” a cada elemento de la
lista
4
• filter p xs: devuelve la lista resultante de filtrar los elementos que cumplen
determinada condición
• all p xs: determina si todos los elementos de la lista cumplen determinada propiedad
• any p xs: determina si algún elemento de la lista cumple determinada propiedad
• foldr operador elemento_inicial lista: devuelve un único valor resultado de utilizar
el operador “operador” entre cada uno de los elementos de la lista, empezando por el
final y usando el primer elemento como valor inicial. Ej: foldr (+) 0 [1, 2, 3, 4, 5] = 15
• foldl operador elemento_ inicial lista: su mecanismo es el mismo que la función
anterior pero actuando de izquierda a derecha
• Expresiones lambda
• Definen funciones anónimas a “pecho descubierto”
• Se pueden pasar como argumento de otras funciones
• Ej:
• (\x -> x + x) 2
• Funciones polimórficas (Tipo a, b, etcétera)