El modelo de ejecución de los programas funcionales puede ser capturado por el proceso de reescritura de términos.
- Las funciones definidas en un programa
funcional se pueden ver como un conjunto de reglas de reescritura, es decir, pares de términos l->r, donde l es la
parte izquierda de la regla (lhs, left-hand-side) y r la parte derecha de la misma
(rhs,
right-hand-side). Su interpretación operacional es: una instancia (llamada redex) de una lhs
puede ser reemplazada o reescrita a la instancia
correspondiente de la rhs. Esto sucede en cada
paso de reescritura.
- El dato de entrada es un término sobre el que se aplican pasos de
reescritura. El proceso de
evaluación del dato de entrada concluye cuando ya no es posible dar
más pasos de reescritura.
Ejemplo:
Las siguientes reglas de reescritura definen la función factorial:
fact(0) -> 1
fact(n) -> n*fact(n-1)
La evaluación del término fact(2)
procede como sigue:
fact(2) -> 2*fact(1) -> 2*1*fact(0) -> 2*1*1 = 2