Zakres leksykalny a dynamiczny w zakresie środowiskowego modelu oceny SICP
WSekcja 3.2.2 SICP wykonanie następującego fragmentu kodu
(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)
jest wyjaśnione w kategoriachten schemat.
Po każdym zastosowaniu funkcji tworzona jest nowa ramka (oznaczona przezE1
przezE4
), który reprezentuje zestaw powiązań między symbolami i wartościami. Gdy symbol nie jest związany w ramce, otoczenie otaczającej ramki jest badane pod kątem powiązania tego konkretnego symbolu.
Interesującą cechą tego diagramu jest to, że wszystkie ramki oznaczone etykietąE
jest zawarty w globalnym środowisku. Tekst wyjaśnia, że dzieje się tak, ponieważ funkcje zostały zdefiniowane w środowisku globalnym, ale nie omawiają kwestii:
Zauważ, że każda ramka utworzona przezsquare
wskazuje na środowisko globalne, ponieważ jest to środowisko wskazane przezsquare
obiekt procedury.
Jeśli zamiast tego oprawia się w środowisko, w którym funkcja ta została wywołana, powiedzmyE3
był zawarty wE2
który z kolei był zawarty wE1
, czy byłby to prawidłowy model działania języka o dynamicznym zasięgu? Czy sposób, w jaki ramki na diagramie mają to samo środowisko macierzyste, ponieważ schemat jest leksykalnie ograniczony?