2012-12-20 35 views
-5

我不知道發生了什麼,但我無法得到這個。如何製作設置爲「1」的計數器

我已經做了幾十個非常相似的問題,但由於某種原因,我只是無法得到這一個。

我正在努力做一個計數器。

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

它只是不會工作。我如何將狀態引入它?我不知道我以爲我知道,但它不會工作。我認爲創建一個像這樣的局部變量會使它工作,但它不會,無論我做什麼,值都不會改變。我的問題是使初始值可調,我可以讓它工作沒有,但沒有。

回答

5

你的代碼有幾個問題。您不必在lambda表單的正文中使用begin,這是隱含的。並且沒有必要將lambda的初始值作爲參數(問題代碼中的1),您要的是返回lambda,它包含count變量。試試這個:

(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