【发布时间】:2011-12-13 18:49:31
【问题描述】:
这可能很容易,但我似乎无法理解
假设我有 a b 和 d
(setq a '(x y))
(setq b '(p q))
(setq d '("a" "b"))
如何获取包含(x y p q) 的列表以及我对d 的信息
更新; 好的,我尝试过的是这个
(apply 'nconc (mapcar (lambda (x)
(symbol-value (intern x)))
d))
但我真的不明白 nconc 是做什么的。如果评估两次,值会发生变化。三次emacs 没有反应
【问题讨论】:
-
C-h f
nconc-> nconc 改变最后一个元素。请改用concat。 -
@Daimrod
concat返回一个字符串而不是一个列表。 -
nconc 是一种破坏性功能:它不是在不更改旧列表的情况下为您构建新列表,而是修改旧列表以生成新列表。至少下面的一些示例是非破坏性的。
-
(concatenate 'list ...)只需调用append并引入您不需要的其他 Common LISP 内容。根据预期使用append或nconc会更简单。 -
除非你知道自己在做什么,否则不要乱用
nconc或其他修改列表结构的函数。 如果你真的需要修改列表结构(而不是创建新列表),你会知道的。炫耀这条指导方针,后果自负——人们很容易认为一切正常,但后来才发现问题,而且往往与真正导致问题的原因相去甚远。