是否有内置函数或宏来将列表附加到可变列表中。像PUSH之类的东西,但略有不同。
这是使用exapmle的PUSH:
(setq v '(3))
(push '(1 2) v) ;v now ((1 2) 3)
我需要休闲行为:
(setq v '(3))
(mappend '(1 2) v) ;v should be (1 2 3)
答案 0 :(得分:0)
我认为您正在寻找nconc?
[功能] nconc& rest list
nconc将列表作为参数。它返回一个列表 争论联系在一起。参数改变而不是 复制。 (将此与append进行比较,后者复制参数而不是 摧毁他们。)例如:
(setq x'(a b c))(setq y'(d e f))(nconc x y)=> (a b c d e f)x => (a b c d e f)
您可以使用nconc定义推送列表宏,使其具有类似于push的接口:
(defmacro pushlist (lst place)
`(setf ,place (nconc ,lst ,place)))
测试一下:
CL-USER>
(defparameter *v* (list 3))
*V*
(pushlist (list 1 2) *v*)
CL-USER>
(1 2 3)
CL-USER>
*v*
(1 2 3)
CL-USER>
另请注意,我在阅读了sigjuice的评论后,使用(列表3)而不是'(3)。