Chapter 3, Modularity, Objects, and State
Exercise 3.4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#lang sicp
(#%require (only racket/base error))
(define (make-account balance secretpwd)
(let ((times 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 pwd m)
(if (eq? secretpwd pwd)
(begin (set! times 0)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
(else (error "Unknown request -- MAKE-ACCOUNT"
m))))
(if (> times 6)
(begin (call-the-cops) (error "Some error happend. Please wait..."))
(begin (set! times (+ times 1))
(error "Invalid Password")))))
dispatch))
(define (call-the-cops)
(error "Cops coming!"))