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?

questionAnswers(1)

yourAnswerToTheQuestion