Translate

jueves, 30 de abril de 2020

Funciones en Haskell

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 (crear una función) y aplicación de función (usar una función para calcular un resultado).

En Haskell, muchas funciones están predefinidas en una biblioteca estándar llamada preludio (prelude)

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 a f (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 enumeradas entre paréntesis y define el resultado de la expresión.

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 se reemplazan por los argumentos.

Veamos un ejemplo :

f = \ x -> x + 1
  f 3
-> {enlace x = 3}
  (x + 1) donde x = 3
-> {sustituir 3 por x}
  3 + 1
->
4

Una función con tres argumentos:

add3nums = \ x y z -> x + y + z

Y podemos usarlo :

10 + 4* add3nums 1 2 3
= {- put extra parentheses in to show structure -}
  10 + ( 4* (add3nums 1 2 3) )
  -- >
  10 + (4*(1+2+3) )
  -- >
  10 + (4*6)
  -- >
  10 + 24
  -- >
  34