Подтвердить что ты не робот

Динамическое масштабирование - глубокое связывание с мелким переплетением

Я пытался размахивать головой по мелкой привязке и глубокой привязке, википедия не очень хорошо объясняет это. Скажем, у меня есть следующий код, какой будет выход, если язык использует динамическое масштабирование с помощью

a) глубокая привязка

b) неглубокая привязка?

x: integer := 1
y: integer := 2

procedure add
  x := x + y

procedure second(P:procedure)
  x:integer := 2
  P()

procedure first
  y:integer := 3
  second(add)

----main starts here---
first()
write_integer(x)
4b9b3361

Ответ 1

Глубокое привязку связывает среду в момент, когда процедура передается как аргумент

Неверное связывание связывает среду в то время, когда процедура фактически называется

Итак, для динамического охвата с глубокой привязкой, когда add передается во вторую среда x = 1, y = 3, а x - глобальная x, поэтому она записывает 4 в глобальный x, который выбирается с помощью write_integer.

Неверное связывание просто проходит до тех пор, пока не найдет ближайшую переменную, которая соответствует имени, поэтому ответ будет равен 1.