1 ;;;;;;;;;;
3.3
2 (define (make-account balance secret-
password)
3
4 (define (withdraw amount)
5 (
if (>=
balance amount)
6 (begin (
set! balance (-
balance amount))
7 balance)
8 "Insufficient funds"))
9
10 (define (deposit amount)
11 (
set! balance (+
balance amount))
12 balance)
13
14 (define (dispatch m)
15 (cond
16 ((eq? m
'withdraw) withdraw)
17 ((eq? m
'deposit) deposit)
18 (
else (error
"Unknow request -- MAKE-ACCOUNT"
19 m))))
20 (lambda (p m)
21 (
if (eq? p secret-
password) (dispatch m)
22 (lambda (x)
"Incorrect password"))))
23
24
25 ;(define acc (make-account
100 'secret-password))
26 ;((acc
'secret-password 'withdraw)
40)
27 ;((acc
'some-other-password 'deposit)
50)
28
29 ;;;;;;;;
3.4
30 (define (
new-make-account balance secret-
password)
31 (let ((count
0))
32
33 (define (withdraw amount)
34 (
if (>=
balance amount)
35 (begin (
set! balance (-
balance amount))
36 balance)
37 "Insufficient funds"))
38
39 (define (deposit amount)
40 (
set! balance (+
balance amount))
41 balance)
42
43 (define (dispatch m)
44 (cond ((eq? m
'withdraw) withdraw)
45 ((eq? m
'deposit) deposit)
46 (
else (error
"Unkonw request --MAKE-ACCOUNT"
47 m))))
48
49 (define (call-the-
cops x)
50 "Call the cops")
51
52 (define (
select p m)
53 (cond ((eq? p secret-
password) (dispatch m))
54 (
else (lambda (x)
55 (
if (>= count
7)
56 (call-the-
cops x)
57 (begin (
set! count (+ count
1))
58 "Incorrect password"))))))
59 select))
60
61 (define acc (
new-make-account
100 'secret-password))
62 ((acc
'secret-password 'withdraw)
40)
63
64 (define (many-
false-
withdraw num)
65 (
if (< num
7)
66 (begin
67 ((acc
'other-password 'withdraw)
40)
68 (
set! num (+ num
1))
69 (many-
false-
withdraw num))
70 ((acc
'other-password 'withdraw)
40)))
71
72 (many-
false-withdraw
0)
3.4最好还加个登录后清零的函数
转载于:https://www.cnblogs.com/tclan126/p/6526014.html
相关资源:数据结构—成绩单生成器