这是我的代码
#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!
答案 0 :(得分: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)