【发布时间】:2016-06-17 21:42:02
【问题描述】:
我试图pop elisp 中的列表元素如下,
(pop '(1 2))
但是,由于我的误解,这不起作用 b/c 该列表尚未被内化为符号。有没有一种惯用的方法来做上述事情,或者这不是一个合适的方法?再胡思乱想,我发现我可以做到
(pop (progn (setq tmp '(1 2)) tmp))
但这似乎不对。有没有办法像我试图做的那样制作匿名列表并就地修改它们?
【问题讨论】:
我试图pop elisp 中的列表元素如下,
(pop '(1 2))
但是,由于我的误解,这不起作用 b/c 该列表尚未被内化为符号。有没有一种惯用的方法来做上述事情,或者这不是一个合适的方法?再胡思乱想,我发现我可以做到
(pop (progn (setq tmp '(1 2)) tmp))
但这似乎不对。有没有办法像我试图做的那样制作匿名列表并就地修改它们?
【问题讨论】:
pop 不会做你认为的那样。它不会修改任何列表。它只是用列表的cdr 重新绑定给定变量。
在 Emacs 中运行 (macroexpand '(pop foo)),我得到:
(car-safe (prog1 foo (setq foo (cdr foo))))
请注意缺少任何列表修改功能,例如 rplaca 或 rplacd。
【讨论】: