Особая форма let*
Особая форма let* подобна let , но только связывания переменных в let* происходят последовательно, и каждое следующее связывание происходит в окружении, где видны все предыдущие. Например,
(let* ((x 3)
(y (+ x 2))
(z (+ x y 5)))
(* x z))
возвращает значение 39 . Объясните, каким образом можно переписать выражение let* в виде набора вложенных выражений let , и напишите процедуру let*->nested-lets , которая проделывает это преобразование. Если мы уже реализовали let (упражнение 4.6 ) и хотим теперь расширить интерпретатор так, чтобы он обрабатывал let* , достаточно ли будет добавить в eval ветвь, в которой действием записано
(eval (let*->nested-lets exp) env)
или нужно явным образом преобразовывать let* в набор непроизводных выражений?
Комментарии отсутствуют.