Анализ альтернативных версий

В процедуре 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 ((<var> <exp>)) <body>)

интерпретируется как альтернативный синтаксис для

((lambda (<var>) <body>) <exp>)

С помощью модели с окружениями проанализируйте альтернативную версию make-withdraw . Нарисуйте картинки, подобные приведенным в этом разделе, для выражений

(define W1 (make-withdraw 100))

(W1 50)

(define W2 (make-withdraw 100))

Покажите, что две версии make-withdraw создают объекты с одинаковым поведением. Как различаются структуры окружений в двух версиях?


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход