【发布时间】:2014-08-12 22:20:53
【问题描述】:
在 Emacs lisp 中有 add-to-list 将单个元素添加到列表中(如果它不存在的话)。
我想添加多个元素,而不是一个。另外,我不想过滤重复的元素,但仍将它们添加到列表中。
目前,我实现了以下功能:
(defun append-to-list (list-var elements)
"Append ELEMENTS to the end of LIST-VAR.
The return value is the new value of LIST-VAR."
(set list-var (append (symbol-value list-var) elements)))
该函数可以满足我的要求,但我想知道 Emacs lisp 中是否已经存在类似(或更好)的东西。我不想重新发明轮子。
更新 1:Stefan 在下面指出此代码不适用于词法范围。有没有办法让它工作?
更新 2:以前我认为重复过滤会很好,但事实并非如此。我确实需要副本。
【问题讨论】:
-
你的代码没问题。没有类似的系统功能。
-
我不会将其描述为“很好”,但是是的,它会起作用。使用
symbol-value和set意味着它不能与词法范围的变量一起使用。除非您真的需要它,否则最好在开头添加elements,因为elements几乎总是比list-var短(有时短得多)。 -
有没有办法让代码使用词法作用域?