(define (make-accumulator base-number)
(lambda (number)
(set! base-number (+ base-number number))
base-number))
(define (make-monitored function)
(let ((count 0))
(lambda (args)
(cond [(number? args)
(set! count (+ count 1))
(function args)]
[(eq? args 'how-many-calls?)
count]
[else
(error "Known request -- MAKE-MONITORED" args)]))))
(define (make-acount balance passwd)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (dispatch your_passwd message)
(print passwd)
(print your_passwd)
(if (eq? your_passwd passwd)
(cond [(eq? message 'withdraw) withdraw]
[(eq? message 'deposit) deposit]
[else (error "Unknow request -- MAKE-ACCOUNT"
message)])
"Incorrect password"))
dispatch)
(define (make-acount balance passwd)
(define wrong-count 0)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (dispatch your_passwd message)
(if (eq? your_passwd passwd)
(cond [(eq? message 'withdraw) withdraw]
[(eq? message 'deposit) deposit]
[else (error "Unknow request -- MAKE-ACCOUNT" message)])
(begin
(print wrong-count)
(set! wrong-count (+ wrong-count 1))
(if (< 3 wrong-count)
"call-the-cops"
"Incorrect passwd"))))
dispatch)
(define (make-acount balance passwd)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (password-update new-password)
(set! passwd new-password))
(define (dispatch your_passwd message)
(if (eq? your_passwd passwd)
(cond [(eq? message 'withdraw) withdraw]
[(eq? message 'deposit) deposit]
[(eq? message 'password-update) password-update]
[else (error "Unknow request -- MAKE-ACCOUNT"
message)])
"Incorrect password"))
dispatch)
(define (make-joint acount old-password new-password)
((acount old-password 'password-update) new-password)
acount)
(define temp 1)
(define (f x) (set! temp (* temp x)))
(+ (f 0) (f 1))
(+ (f 1) (f 0))