这可能很容易但我似乎无法获得
我要说a
b
和d
(setq a '(x y))
(setq b '(p q))
(setq d '("a" "b"))
如何获取包含(x y p q)
的列表以及我对d
UPDATE; 好的,我曾尝试过这个
(apply 'nconc (mapcar (lambda (x)
(symbol-value (intern x)))
d))
但我真的不明白nconc的作用。如果评估两次,价值变化。三次emacs 没有回应
答案 0 :(得分:3)
这应该这样做:
(apply 'append (mapcar (lambda (name) (symbol-value (intern name))) d))
您可以更改d
使用符号而不是字符串吗?这样做会简单得多:
(setq d '(a b))
(apply 'append (mapcar 'symbol-value d))
如果在设置a
时已知b
和d
的内容,您甚至可以这样做:
(setq d `(,@a ,@b))
答案 1 :(得分:1)
请参阅mapcan:
(let ((a '(x y))
(b '(p q))
(d '("a" "b")))
(mapcan (lambda (x) (symbol-value (intern x))) d))
答案 2 :(得分:-1)
这应该是关闭的:
(append (eval (read-from-string (car d))) (eval (read-from-string (cadr d))))
如果d可以更长,你可以在你的列表上映射(eval(read-from-string x)),然后将append应用于结果;我会把它留作练习:))
答案 3 :(得分:-1)
我的Emacs Lisp foo不是很强大,但也许你可以试试以下
(reduce 'append
(map 'list
'(lambda (l) (eval (read l)) )
d ))
也适用于长列表。