Evaluaciones perezosas y diligentes

Además, una vez que la máquina M ha determinado el orden en función de las dependencias, es posible que se encuentre con fórmulas de paso cuya evaluación no es necesaria. En este caso debemos saber que hay dos tipos de evaluación: la evaluación "perezosa" (lazy evaluation en inglés) y la evaluación que podemos llamar "diligente" (eager evaluation en inglés).

La evaluación "perezosa" es aquella que se realiza solo cuando se necesita. Por ejemplo, las asignaciones a variables son de este tipo.

El resto de expresiones son "diligentes": se evalúan tan pronto como se encuentran durante el proceso de ejecución de la consulta.

De esta forma se ahorran recursos al permitir a la máquina M ignorar aquellas expresiones innecesarias cuya evaluación podría llevar demasiado tiempo o exigir demasiada memoria o potencia de cálculo. Así, por ejemplo, en el siguiente código:

let
    a = 2,
    b = 1,
    c = a + 2
in
    c

la asignación a la variable b no es necesaria, pues esta variable no se ve implicada en la evaluación del resultado de la consulta, motivo por el que la máquina M no la va a ejecutar en ningún momento.