Вопрос

Мне нужна некоторая помощь в понимании материала из раздела 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> (хотя еще не назначенный -- но это нормально!-).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top