You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.0 KiB
39 lines
1.0 KiB
2 years ago
|
|
||
|
Exercise 3.10: In the make-withdraw
|
||
|
procedure, the local variable balance is created as a parameter of
|
||
|
make-withdraw. We could also create the local state variable
|
||
|
explicitly, using let, as follows:
|
||
|
|
||
|
|
||
|
(define (make-withdraw initial-amount)
|
||
|
(let ((balance initial-amount))
|
||
|
(lambda (amount)
|
||
|
(if (>= balance amount)
|
||
|
(begin (set! balance
|
||
|
(- balance amount))
|
||
|
balance)
|
||
|
"Insufficient funds"))))
|
||
|
|
||
|
Recall from 1.3.2 that let is simply syntactic sugar for a
|
||
|
procedure call:
|
||
|
|
||
|
|
||
|
(let ((⟨var⟩ ⟨exp⟩)) ⟨body⟩)
|
||
|
|
||
|
is interpreted as an alternate syntax for
|
||
|
|
||
|
|
||
|
((lambda (⟨var⟩) ⟨body⟩) ⟨exp⟩)
|
||
|
|
||
|
Use the environment model to analyze this alternate version of
|
||
|
make-withdraw, drawing figures like the ones above to illustrate the
|
||
|
interactions
|
||
|
|
||
|
|
||
|
(define W1 (make-withdraw 100))
|
||
|
(W1 50)
|
||
|
(define W2 (make-withdraw 100))
|
||
|
|
||
|
Show that the two versions of make-withdraw create objects with the same
|
||
|
behavior. How do the environment structures differ for the two versions?
|