È la regola di valutazione “pigra” (call by name) che consiste nel ritardare la valutazione delle espressioni finché il loro valore non sia necessario per la valutazione di un’altra espressione. Ciò vuol dire che nella semantica lazy le variabili possono avere associate anche espressioni non ancora valutate.
Nella semantica operazionale lazy, l’ambiente è una mappatura tra i nomi delle variabili e una coppia , detta thunk, dove è l’espressione corrispondente valutata solo nel momento della loro chiamata, e è un ambiente.
Regole di inferenza della valutazione lazy per la versione lazy del linguaggio Exp:
L’essenza della valutazione lazy sta nella regola d’inferenza della variabile, cioè la seconda di quelle sopra:
Vuol dire: avendo trovato una variabile nell’espressione , per valutare risolvi in .
Le regole di inferenza sono quasi uguali sia per lazy dinamico che statico. La differenza sta in come sono gestite le espressioni e gli ambienti quando si valuta una variabile trovata all’interno di un’espressione .
L’altra differenza sta nell’interpretazione di :
- nel lazy dinamico è l’ambiente corrente al momento dell’esecuzione,
- nel lazy statico è l’ambiente al momento della definizione.
Lazy dinamico
Nel lazy con scoping dinamico l’ambiente memorizza solo le espressioni sintattiche pure, senza conservare anche l’ambiente in cui sono state definite, in quanto le espressioni vengono risolte nell’ambiente in cui sono valutate, non nell’ambiente dove sono state scritte originariamente.
Lazy statico
Per mantenere vero il teorema dell’equivalenza tra lazy statica e eager, nello scoping statico ogni espressione in un’ambiente è mappata a una coppia (variabile, ambiente in cui la variabile è stata definita originariamente).