如何设置一个设置为“1”的计数器

时间:2012-12-20 17:57:31

标签: scheme variable-assignment

我不知道发生了什么,但我无法得到这个。

我已经做了很多非常相似的问题,但由于某种原因我无法得到这个问题。

我正在努力制作一个柜台。

      (define (make-counter init)
           (let ((count init))
             ((lambda (x)
           (begin (set! count (+ count x)) count))1)))

它不会起作用。我如何将状态引入其中?我不知道我以为我知道但它不起作用。我认为创建一个像这样的局部变量会使它工作,但事实并非如此,无论我做什么,价值永远不会改变。我的问题是使初始值可调,我可以让它工作没有它,但不是。

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