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 :
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.