Принято считать, что динамическое связывание отличается от лексического правилами подстановки свободных переменных. Во всяком случае, много где об этом пишут. Однако, ИМХО, это не совсем так, а может быть и совсем не так. Давайте проанализируем выражение, полагая, что у нас динамическое связывание:
(define (inner y) (+ x y))
(define (outer x) (inner 1))
(print (outer 2)) ; 3
(print ((lambda(x) ((lambda(y) (+ x y)) 1)) 2)) ; 3
На самом деле, похоже, при любом связывании, правила подстановок действуют те же самые. Разница тот в другом. При динамическом байндинге, мы сначала, условно говоря, генерируем выражение, а затем исполняем, а при лексическом, сразу пишем выражение, минуя процесс разворачивания кода. То есть, лексическое связывание — это просто более примитивный подход, правила подстановки тут не причем.