2012-10-06 16 views
11

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 procedura square.

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?

risposta

5

La risposta ad entrambe le domande è . Quel capitolo di SICP sta spiegando lo scope lessicale senza usare effettivamente il termine. Cambiando il meccanismo di valutazione come descritto, si creerebbe un modello con ambito dinamico.

Problemi correlati