пятница, 7 января 2011 г.

Exercise-3-03


Упражнение 3.3.
Измените процедуру make-account так, чтобы она создавала счета, защищенные паролем. А именно, make-account должна в качестве дополнительного аргумента принимать символ, например

(define acc (make-account 100 ’secret-password))

Получившийся объект-счет должен обрабатывать запросы, только если они сопровождаются паролем, с которым счет был создан, а в противном случае он должен жаловаться:

((acc ’secret-password ’withdraw) 40)
60
((acc ’some-other-password ’deposit) 50)
"Неверный пароль"

Опять не сложное упражнение, но при его реализации можно столкнуться со следующей проблемой - make-account возвращала функцию от одного аргумента надо бы эту логику и оставить вместо возвращения сообщения об ошибке, для этого в случае ошибки будем возвращать функцию которая будет возвращать сообщение об ошибки при любых праметрах

(define (make-account balance password)
  (define (withdraw amount)
    (if (>= balance amount)
        (begin (set! balance (- balance amount)) balance)
        "Недостаточно денег на счете"))
  (define (deposit amount) (set! balance (+ balance amount)) balance)
  (define (dispatch pass m)
    (if (eq? pass password)
        (cond ((eq? m 'withdraw) withdraw)
              ((eq? m 'deposit) deposit)
              (else (error "Неизвестный вызов -- MAKE-ACCOUNT" m)))
        (λ(arg . other)"Неверный пароль")))
  dispatch)

Комментариев нет:

Отправить комментарий