Упражнение 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)
Комментариев нет:
Отправить комментарий