如何在球拍中清除结果?

时间:2014-01-19 23:33:33

标签: scheme racket

这是我的代码

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

这是结果

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

问题是我希望(添加'(2))只显示(2)而不是(2 1),我不想要前一个结果。 我想要这样的结果:

> (add '(1))
> a
'(1)
> (add '(2))
> a
'(2)
> (add '(3))
'(3)
有人能帮帮我吗? THX!

1 个答案:

答案 0 :(得分:1)

您的代码:

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

明确改变al的新元素和原始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)