如何从ELisp中的另一个列表中删除元素列表?

时间:2014-07-29 06:35:49

标签: list emacs elisp

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local ac-sources
                        (delq '(ac-source-dictionary ac-source-words-in-same-mode-buffers) ac-sources))))

我发现这里delq只能从列表中删除元素,它不能从另一个列表中删除列表。既不delete

所以如何归档我的效果。

2 个答案:

答案 0 :(得分:1)

在循环中使用delq

(mapcar (lambda (x) (setq ac-sources (delq x ac-sources)))
        '(ac-source-dictionary ac-source-words-in-same-mode-buffers))

答案 1 :(得分:1)

您正在寻找的功能称为cl-set-difference

(add-hook 'org-mode-hook
  (lambda ()
    (setq-local ac-sources
                (cl-set-difference 
                 ac-sources
                 '(ac-source-dictionary ac-source-words-in-same-mode-buffers)))))

另见How to calculate difference between two sets in emacs lisp,the sets should be lists