我从第 2.9 节中读到了这样一个make-counter
例子。方案编程作业
> (define make-counter
(lambda ()
(let ([next 0])
(lambda ()
(let ([v next])
(set! next (+ next 1))
v)))))
> (define count1 (make-counter))
> (count1)
0
> (count1)
1
我在这里很困惑,“下一步”的状态是如何保持的?
以我的理解,
(define count1 (make-counter))
返回值v
,然后是make-counter
消失和销毁的过程,
当count1
再次被调用时,又被调用了一次make-counter
,所以预期的结果应该一直是“0”。
但是,它神奇地打印以下内容:
> (count1)
1
> (count1)
2
> (count1)
3
> (count1)
4
> (count1)
5
如何保持“下一个”的状态?