Анализ альтернативных версий
В процедуре make-withdraw локальная переменная balance создается в виде параметра make-withdraw . Можно было бы создать локальную переменную и явно, используя let , а именно:
(define (make-withdraw initial-amount)
(let ((balance initial-amount))
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))))
Напомним, что в разделе 1.3.2 говорится, что let всего лишь синтаксический сахар для вызова процедуры:
(let (( )) )
интерпретируется как альтернативный синтаксис для
((lambda () ) )
С помощью модели с окружениями проанализируйте альтернативную версию make-withdraw . Нарисуйте картинки, подобные приведенным в этом разделе, для выражений
(define W1 (make-withdraw 100))
(W1 50)
(define W2 (make-withdraw 100))
Покажите, что две версии make-withdraw создают объекты с одинаковым поведением. Как различаются структуры окружений в двух версиях?
Комментарии отсутствуют.