sábado, 25 de abril de 2020

Reducción en Haskell

El mecanismo para ejecutar programas funcionales es la reducción. La reducción es el proceso de convertir una expresión a una forma más simple. Conceptualmente, una expresión se reduce simplificando una expresión reducible (llamada "redex") a la vez. Cada paso se denomina reducción y usaremos -> para mostrar el resultado.

  3 + (4*5)
--  >
  3 + 20
--  >
23

La reducción es importante porque es el único medio de ejecución de un programa funcional. No hay declaraciones, como en los lenguaje imperativos; todo el cómputo se logra únicamente mediante la reducción de expresiones.

Cuando se realiza una reducción, solo hay una respuesta posible. En este ejemplo, el cálculo solo tiene una ruta posible:

  3 + (5 * (8-2))
--  >
  3 + (5 * 6)
--  >
  3 + 30
--  >
33

Solo hay una posible ruta de reducción en ese ejemplo, porque en cada paso la expresión actual contiene solo una redex.

Si una expresión contiene varios redexes, habrá varias rutas de reducción.

(3+4) * (15-9)
-- >
  7 * (15-9)
-- >
  7 * 6
-- >
 42

(3+4) * (15-9)
-- >
  (3+4) * 6
-- >
  7 * 6
-- >
  42

¡El resultado no depende de la ruta de reducción!
Cada ruta de reducción de terminación da el mismo resultado

Esto significa que :
  • La corrección no depende del orden de evaluación.
  • El compilador (o programador) puede cambiar el orden libremente para mejorar el rendimiento, sin afectar el resultado.
  • Se pueden evaluar diferentes expresiones en paralelo, sin afectar el resultado. 

No hay comentarios.:

Publicar un comentario