Вопрос
Мне нужна некоторая помощь в понимании материала из раздела 4.1.6 SICP, посвященного внутренним определениям.
Я понимаю проблему, возникающую при определении взаимно рекурсивных функций.Но я не понимаю, как это решается путем преобразования следующего лямбда-выражения
(lambda <vars >
(define u <e1 >)
(define v <e2 >)
<e3 >)
в:
(lambda <vars >
(let ((u ’*unassigned*)
(v ’*unassigned*))
(set! u <e1 >)
(set! v <e2 >)
<e3 >))
Кто-нибудь может мне здесь помочь?Спасибо.
Решение
Если <e1>
пытается ссылаться на v
в первой форме это терпит неудачу -- v
не определено (не пока, но тот не часть является самой важной).Но во второй форме, v
является определенный к тому времени, когда вы доберетесь до <e1>
(хотя еще не назначенный -- но это нормально!-).
Не связан с StackOverflow