Function: cl-set-difference

cl-set-difference is an autoloaded and byte-compiled function defined in cl-seq.el.gz.

Signature

(cl-set-difference LIST1 LIST2 [KEYWORD VALUE]...)

Documentation

Combine LIST1 and LIST2 using a set-difference operation.

The resulting list contains all items that appear in LIST1 but not LIST2. This is a non-destructive function; it makes a copy of the data if necessary to avoid corrupting the original LIST1 and LIST2.

Keywords supported: :test :test-not :key

View in manual

Aliases

set-difference (obsolete since 27.1)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-seq.el.gz
;;;###autoload
(defun cl-set-difference (list1 list2 &rest cl-keys)
  "Combine LIST1 and LIST2 using a set-difference operation.
The resulting list contains all items that appear in LIST1 but not LIST2.
This is a non-destructive function; it makes a copy of the data if necessary
to avoid corrupting the original LIST1 and LIST2.
\nKeywords supported:  :test :test-not :key
\n(fn LIST1 LIST2 [KEYWORD VALUE]...)"
  (declare (important-return-value t))
  (if (or (null list1) (null list2)) list1
    (cl--parsing-keywords (:key) (:test :test-not)
      (let ((res nil))
        (while list1
          (or (if (or cl-keys (numberp (car list1)))
                  (apply #'cl-member (cl--check-key (car list1))
                         list2 cl-keys)
                (memq (car list1) list2))
              (push (car list1) res))
          (pop list1))
        (nreverse res)))))