附加在字符串列表中指定的符号名称的列表

时间:2011-12-13 18:49:31

标签: emacs lisp elisp

这可能很容易但我似乎无法获得

我要说a bd

(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 没有回应

4 个答案:

答案 0 :(得分:3)

这应该这样做:

(apply 'append (mapcar (lambda (name) (symbol-value (intern name))) d))

您可以更改d使用符号而不是字符串吗?这样做会简单得多:

(setq d '(a b))
(apply 'append (mapcar 'symbol-value d))

如果在设置a时已知bd的内容,您甚至可以这样做:

(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 ))

也适用于长列表。