In Section 3.2.2 del SICP l'esecuzione del seguente pezzo di codicelessicale vs visibilità dinamica in termini di modello dell'ambiente di SICP di valutazione
(define (square x)
(* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (f a)
(sum-of-squares (+ a 1) (* a 2)))
(f 5)
è spiegato in termini di questo schema:
Ogni volta che una funzione viene applicata, un nuovo frame viene creato (etichettato con E1
attraverso E4
) che rappresenta una serie di associazioni tra simboli e valori. Quando un simbolo non è vincolato in una cornice, l'ambiente che racchiude quell'inquadratura viene interrogato per un legame di quel particolare simbolo.
La cosa interessante di questo diagramma è che tutti i frame contrassegnati da E
sono contenuti nell'ambiente globale. Il testo spiega che questo è perché le funzioni è stata definita nel contesto globale, ma non approfondisce la questione:
Si noti che ogni fotogramma creato da
square
punti per l'ambiente globale, dal momento che questo è l'ambiente indicato da l'oggetto procedurasquare
.
Se invece fotogrammi in cui contenuto nell'ambiente che la funzione è stata chiamata, per esempio E3
era contenuta in E2
a sua volta contenuta in E1
, vorrei che essere un valido modello di come funziona una lingua con ambito in modo dinamico? Inoltre, il modo in cui i frame nel diagramma hanno lo stesso ambiente "padre" perché Scheme è con scope lessicale?