我想充分了解他们的变量的对象和当地州
此代码似乎产生了多次调用相同的过程,这意味着局部变量的变化不同的结果:
(define new-withdraw
(let ((balance 100))
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))))
对于该其他代码,这产生相同的结果,这意味着它为每个过程调用新的本地变量:
(define (make-account)
(let ((balance 100))
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (dispatch m)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
(else (error "Unknown request -- MAKE-ACCOUNT"
m))))
dispatch))
我的问题是:
为什么他们不同的表现,尽管创建一个使用让局部变量?
有没有一种方法可以使第二代码工作作为第一个没有通过
balance
作为一个参数make-account
?
谢谢