2014-01-19 49 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