两个版本由于多了一层lambda表达式,会多创建一层环境,当set操作的时候,会先从E1里面找有没有这个约束,如果有的话,就改变值,如果没有继续往上层环境找。
#lang racket
(define (make-withdraw initial-amount)
(let ((balance initial-amount))
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))))