【发布时间】:2016-04-12 17:01:52
【问题描述】:
这是来自环境模型部分的 SICP 课程:
(define make-counter
(lambda (n)
(lambda () (set! n (+ n 1))
n)))
下面,解释器说(make-counter 0)是一个过程:
> (make-counter 0)
#<procedure:...make_counter.rkt:8:5>
下面,我将c1定义为(make-counter 0)。
(define c1 (make-counter 0)
下面是我对(c1) 返回计数器值而不是"procedure" 的原因感到困惑的地方。
>(c1)
1
> (c1)
2
> (c1)
3
我的思考过程是如果(c1)指向一个过程(make-counter),那么(c1)应该返回"procedure:...make_counter.rkt:8:5"。
因为程序 -> 程序。
我知道应该发生什么,我只是在概念上对如何以及为什么感到困惑。
【问题讨论】:
-
这些答案正在帮助我检查我的想法。一个难题是如何
-
请不要忘记:为有用的答案投票,并将其中一个标记为解决方案,以便关闭。或者重新提出问题。
-
最后,我很清楚为什么 (c1) 返回计数器。现在,它的 (make-counter 0)。手工操作,我不明白为什么不返回 n 。有人可以向我解释一下吗?
标签: scheme closures state evaluation sicp