1 day ago
my attempt to do the exercises in sicp.
Monday, August 17, 2009
sicp exercise 3.3
;; Exercise 3.3. Modify the make-account procedure so that it creates password-protected accounts. That is, make-account should take a symbol as an additional argument, as in
;; (define acc (make-account 100 'secret-password))
;; The resulting account object should process a request only if it is accompanied by the password with which the account was created, and should otherwise return a complaint:
;; ((acc 'secret-password 'withdraw) 40)
;; 60
;; ((acc 'some-other-password 'deposit) 50)
;; "Incorrect password"
(define (make-account balance password)
(define (wrong-passwd arg) "Incorrect password")
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (dispatch passwrd m)
(if (eq? passwrd password)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
(else (error "Unknown request -- MAKE-ACCOUNT"
m)))
wrong-passwd))
dispatch)
(define acc (make-account 100 'secret-password))
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'secret-password 'withdraw) 40)) (newline)
(display ((acc 'some-other-password 'deposit) 50)) (newline)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment