我真的有問題,瞭解如何創建變量,將作爲在球拍累加器。這絕對是一個非常愚蠢的問題....但拍的文檔是相當困難的,我閱讀。創建球拍累加器「變量」
我知道我會使用某種類型的定義語句或讓語句。
我希望能夠爲數字傳遞給一個變量或函數,並用新的值保持總和......我將如何做到這一點增加了電流值....?謝謝。
(define (accumulator newvalue) "current=current+newvalue"
這樣的事情..
我真的有問題,瞭解如何創建變量,將作爲在球拍累加器。這絕對是一個非常愚蠢的問題....但拍的文檔是相當困難的,我閱讀。創建球拍累加器「變量」
我知道我會使用某種類型的定義語句或讓語句。
我希望能夠爲數字傳遞給一個變量或函數,並用新的值保持總和......我將如何做到這一點增加了電流值....?謝謝。
(define (accumulator newvalue) "current=current+newvalue"
這樣的事情..
累加器通常只是一個函數參數。有在程序設計方法,涵蓋蓄電池(online, starting here)幾章。你讀過嗎?
例如,reverse
功能是使用記住列表的前綴的累加器來實現,相反:
;; reverse : list -> list
(define (reverse elems0)
;; reverse/accum : list list -> list
(define (reverse/accum elems reversed-prefix)
(cond [(null? elems)
reversed-prefix]
[else
(reverse/accum (cdr elems)
(cons (car elems) reversed-prefix))]))
(reverse/accum elems null))
注意,累加器reversed-prefix
的範圍僅限於該功能。它通過用該參數的新值調用該函數進行更新。對reverse
的不同呼叫具有不同的累加器,並且reverse
不會記得從一個呼叫到下一個呼叫。
也許你的意思是狀態變量。在這種情況下,您可以在適當的範圍內define
(或將其與let
或lambda
綁定),並使用set!
進行更新。這是一個全球性的狀態變量:
;; total : number
(define total 0)
;; add-to-total! : number -> number
(define (add-to-total! n)
(set! total (+ total n))
total)
(add-to-total! 5) ;; => 5
(add-to-total! 31) ;; => 36
下面是一個創建本地狀態變量的變化,所以你可以有多個櫃檯:
;; make-counter : -> number -> number
(define (make-counter)
(let ([total 0])
(lambda (n)
(set! total (+ total n))
total)))
(define counterA (make-counter))
(define counterB (make-counter))
(counterA 5) ;; => 5
(counterB 10) ;; => 10
(counterA 15) ;; => 20
(counterB 20) ;; => 30
但不叫狀態變量蓄電池;它會混淆人們。
你的意思是這樣?
(define (accumulator current newvalue)
(let ((current (+ current newvalue)))
...)
號我希望能夠越來越多值添加到它.....我應該能夠調用累加器3次,每次加3時間.....每次它顯示前加入3. – Rell3oT 2012-03-09 07:21:58
可以close over累加器變量:
(define accumulate
(let ((acc 0))
(λ (new-val)
(set! acc (+ acc new-val))
acc)))
(accumulate 10) ;=> 10
(accumulate 4) ;=> 14
非常感謝。 – Rell3oT 2012-03-09 17:05:12
比你了!這是非常豐富的 – Rell3oT 2012-03-09 17:05:25