Я написал процедуру для вычисления суммы квадратов первого и второго наибольшего из 3 чисел, как показано ниже ...
(define (max2of3 x y z)
(let ((first (max x y))
(second (max first z)))
(+ (* first first) (* second second))))
Но я получаю сообщение об ошибке ...
[2] (нагрузка "max2of3")
Хорошо
[3] (max2of3 1 2 3)
[ВМ ОШИБКА обнаружена!] Переменная не определена в лексической среде
ПЕРВЫЙ
Хотя я понимаю, что ошибка вызвана тем, что интерпретатор не распознает переменную 'FIRST', я не понимаю, почему?
По определению из SICP:
Первая часть выражения let представляет собой список пар имя-выражение. Когда оценка оценивается, каждый
Имя связано со значением соответствующего выражения. Тело пусть оценивается с
эти имена связаны как локальные переменные
Разве это не означает, что конструкция let позволяет объявлять переменную в блоке объявлений?
Спасибо.