我不知道发生了什么,但我无法得到这个。
我已经做了很多非常相似的问题,但由于某种原因我无法得到这个问题。
我正在努力制作一个柜台。
(define (make-counter init)
(let ((count init))
((lambda (x)
(begin (set! count (+ count x)) count))1)))
它不会起作用。我如何将状态引入其中?我不知道我以为我知道但它不起作用。我认为创建一个像这样的局部变量会使它工作,但事实并非如此,无论我做什么,价值永远不会改变。我的问题是使初始值可调,我可以让它工作没有它,但不是。
答案 0 :(得分:5)
您的代码中存在一些问题。您不必在begin
表单的正文中使用lambda
,它是隐含的。并且不需要将lambda
作为参数(问题中的代码中的1
)应用lambda
,您想要的是返回count
,其中包含{ {1}}变量。试试这个:
(define (make-counter init)
(let ((count init))
(lambda (x)
(set! count (+ count x))
count)))
像这样使用:
; counter is a procedure, with an internal variable initialized to 10
(define counter (make-counter 10))
; check that the variable was correctly initialized
(counter 0)
=> 10
; add 2 to the internal variable
(counter 2)
=> 12
; add 3 to the internal variable
(counter 3)
=> 15