オブジェクトとその変数のローカル状態を完全に理解しようとしています
このコードは、複数回呼び出された同じプロシージャに対して異なる結果を生成するようです。つまり、ローカル変数が変更されます。
(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))
私の質問は次のとおりです。
letを使用してローカル変数を作成しているにもかかわらず、動作が異なるのはなぜですか?
balance
のパラメーターとして渡さずに、2 番目のコードを最初のコードとして機能させる方法はありますmake-account
か?
ありがとうございました