es12 Con la semantica modificata, quando l'interprete cerca un identificatore in un frame per restituirne il valore associato, se tale identificatore non appartiene al dominio del frame, l'interprete, anziche' proseguire la ricerca nel frame immediatamente superiore (il padre) la prosegue nel frame puntato da quello immediatamente superiore (il nonno). Il valore di (f 7) viene cosi' ad essere 8 anziche' 5. Infatti nella valutazione di (f 7) l'ambiente si sviluppa nel modo seguente: ----------------- | f --> | <-- n1 ----------------- ^ | ----------- n2 ---------------- | y --> 7 | <-------- | h --> | <-- n2' ----------- ---------------- ^ | ----------- n3 ----------------- | y --> 4 | <-------- | g --> | <-- n3' ---------- --------------- ^ | ---------- | x --> 1 | <------ n4 ---------- dove e1 = (lambda (y) (let ((h (lambda (y) (let ((g (lambda (x) (+ x y)))) (g 1))))) (h 4))) e2 = (lambda (y) (let ((g (lambda (x) (+ x y)))) (g 1))) e3 = (lambda (x) (+ x y)) Usando il puntatore n4 si va a valutare (+ x y), che e' anche il valore finale di (F 7). Se per avere il valore di y risalissimo al padre di n4, come e' di solito, il valore di (+ x y) sarebbe 5. Risalendo invece al nonno atteniamo 8. Notare come in n2 si valuta il let piu' esterno, mentre in n3 quello piu' interno. In n2' si valuta il corpo del let piu' esterno, mentre in n3' il corpo del let piu' interno.