2014-01-19 50 views
-1

這裏是我的代碼如何清除球拍結果?

#lang racket 
(define a '()) 
(define (add l) 
    (set! a (cons (car l) a))) 

這裏是結果

> (add '(1)) 
> a 
'(1) 
> (add '(2)) 
> a 
'(2 1) 

問題是,我想(添加「(2))只能說明(2)替代(1:2),我不想要以前的結果。 我想要的結果是這樣的:

> (add '(1)) 
> a 
'(1) 
> (add '(2)) 
> a 
'(2) 
> (add '(3)) 
'(3) 

有人可以幫助我嗎?謝謝!

回答

1

您的代碼:

(define (add l) 
    (set! a (cons (car l) a))) 

顯然改變了a的結合來自新元素從l和原始a形成一個新的列表。這就是cons部分所做的。即使它的名字add反映了這一點。你似乎想別的東西,如:

(define (replace-a x) 
    (set! a x)) 

(replace-a '(1)) 
a ; ==> (1) 

(replace-a '(2)) 
a ; ==> (2) 

(replace-a '(3)) 
a ; ==> (3) 

如果你僅僅想重新a重新來過,你用set以及並把它放在你想要重置:

(set! a '()) ; set a to the empty list (null) 
+0

對不起,有什麼我的意思是我的(定義一個'())存儲的結果,我希望它清除之前運行結果(定義(加l)) –

+0

你能告訴我該怎麼做嗎? –

+0

@FrankYang我已經更新了我的答案。基本上你也使用'set!'。請記住,改變全局變量不是很像Scheme,但它發生了。 – Sylwester