出于演示目的,
我列表中有一个列表:
> (setf x (list '(1 2 1) '(4 5 4)))
((1 2 1) (4 5 4))
> (length x)
2
我想为它添加一个新列表'(2 3 2)。 附加功能:
> (append '(2 3 2) x)
(2 3 2 (1 2 1) (4 5 4))
> (length (append '(2 3 2) x))
5
并没有真正做我想做的事。
我想要的是像这样添加'(2 3 2):
((8 7 8) (1 2 1) (4 5 4))
这样长度为3。
到目前为止,我还没有看到任何例子或方法来做我想要的事情。是否有内置功能或有效的方法?
答案 0 :(得分:4)
APPEND不是破坏性的功能,这就是你要求的。 APPEND做的是分配一个新的列表,然后返回。
您可以采取的措施是:
(setf x (append '((...)) x)) ;;appends the quoted list to x
还有函数NCONC,它可以破坏性地调整指针。
对于你的冥想,我提出了示例工作:
CL-USER> (defparameter *x* nil)
*X*
CL-USER> (setf *x* '((1 2 3) (4 5 6)))
((1 2 3) (4 5 6))
CL-USER> (append *x* '(10 11 12))
((1 2 3) (4 5 6) 10 11 12)
CL-USER> (append *x* '((10 11 12)))
((1 2 3) (4 5 6) (10 11 12))
CL-USER> (setf *x* (append *x* '((10 11 12))))
((1 2 3) (4 5 6) (10 11 12))
CL-USER> *x*
((1 2 3) (4 5 6) (10 11 12))
CL-USER>
答案 1 :(得分:2)
APPEND
附加列表。如果您有两个子列表((1 2 1) (4 5 4))
的列表,并且想要在其前面添加另一个子列表((2 3 2))
的列表。
CL-USER 99 > (append '((2 3 2)) '((1 2 1) (4 5 4)))
((2 3 2) (1 2 1) (4 5 4))
或使用此项,如果您想在列表前面添加一个项目:
CL-USER 98 > (cons '(2 3 2) '((1 2 1) (4 5 4)))
((2 3 2) (1 2 1) (4 5 4))