Haskell es un lenguaje funcional, por lo que el concepto de función es esencial para el lenguaje. Una función toma uno o más argumentos y calcula un resultado. Dados los mismos argumentos, el resultado siempre será el mismo. Esto es similar a una función matemática y significa que en Haskell no hay efectos secundarios. Hay dos operaciones fundamentales en las funciones: definición de función (creando una función) y aplicación de función (usando una función para calcular un resultado).
En Haskell, muchas funciones están predefinidas en una biblioteca estándar llamada preludio.
¡Pero la esencia de la programación funcional es definir sus propias funciones para resolver sus problemas!
Una función se define mediante una ecuación.
f = \ x -> x + 1 - función lambda
- o
f x = x + 1 - función nombrada
Esto es equivalente af (x) = x + 1 en notación matemática.
El lado izquierdo de la ecuación parece una variable, y eso es lo que es
El lado derecho es una expresión que usa las variables locales listadas entre paréntesis y define el resultado de la expresión.
Una definición de función es una ecuación, p. Ej. f = ∖ x → x + 1
El lado izquierdo da el nombre de la función;
El lado derecho (el "cuerpo") es una expresión que da los parámetros formales y el valor de la aplicación. La expresión puede usar los parámetros.
Una aplicación es una expresión como f 31, donde 31 es el argumento.
La aplicación se evalúa reemplazándola con el cuerpo de la función, donde los parámetros formales son reemplazados por los argumentos.
Ejemplo de aplicacion
f = \ x -> x + 1
f 3
-> {vincular x = 3}
(x + 1) donde x = 3
-> {sustituye 3 por x}
3 + 1
->
4
Podríamos tener funciones con multiples argumentos, una función con tres argumentos:
add3nums = \ x y z -> x + y + z
Para usarlo,
10 + 4 * add3nums 1 2 3
10 + (4 * (add3nums 1 2 3))
->
10 + (4 * (1 + 2 + 3))
->
10 + (4 * 6)
->
10 + 24
->
34