Haskell Hero
Haskell Hero es un manual interactivo del lenguaje Haskell para principiantes.
|
Eta conversión¿Qué es la eta conversión?La eta conversión es un método de como quitar parámetros formales de definiciones de funciones.
Por ejemplo una función mas x y = x + y se puede expresar sin parámetros formales de manera siguiente:
Ejemplo
Definid esta función sin el uso de lambdas:
\x -> 0 < 35 - 3 * 2 ^ x
Primero convertimos toda la expresión en la notación prefija respectando las prioridades de operadores individuales.
\x -> (<) 0 ((-) 35 ((*) 3 ((^) 2 x))) La notación prefija de funciones binarias la podemos escribir como una aplicación parcial de una función binaria a un parámetro. \x -> (0<) ((35-) ((3*) ((2^) x))) Ahora ya podemos empezar con la conversión de la expresión al estilo pointfree (libre de puntos). Vamos a usar la definición de la función (.): (f . g) x = f (g x) Esta definición la aplicamos al parámetro de la función (35-) :
(3*) ((2^) x) --f- (--g- x) \x -> (0<) ((35-) (((3*).(2^)) x)) Seguimos de la misma manera: (35-) (((3*).(2^)) x) --f-- (-----g----- x) \x -> (0<) (((35-).((3*).(2^))) x) Otra vez lo mismo. (0<) (((35-).((3*).(2^))) x) --f- (---------g--------- x) \x -> ((0<).((35-).((3*).(2^)))) x Ahora el parámetro x está ya totalmente a la derecha, entonces podemos quitar la lambda. (0<).((35-).((3*).(2^))) Ya que la función (.) asocia de la derecha, podemos quitar las paréntesis que indican el orden de la evaluación. (0<).(35-).(3*).(2^) |