Function: cl-union

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

Signature

(cl-union LIST1 LIST2 [KEYWORD VALUE]...)

Documentation

Combine LIST1 and LIST2 using a set-union operation.

The resulting list contains all items that appear in either LIST1 or 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

union (obsolete since 27.1)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-seq.el.gz
;;;###autoload
(defun cl-union (list1 list2 &rest cl-keys)
  "Combine LIST1 and LIST2 using a set-union operation.
The resulting list contains all items that appear in either LIST1 or 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))
  (cond ((null list1) list2) ((null list2) list1)
        ((and (not cl-keys) (equal list1 list2)) list1)
	(t
         (or (>= (length list1) (length list2))
             (setq list1 (prog1 list2 (setq list2 list1))))
         (while list2
           (if (or cl-keys (numberp (car list2)))
               (setq list1
                     (apply #'cl-adjoin (car list2) list1 cl-keys))
             (or (memq (car list2) list1)
                 (push (car list2) list1)))
           (pop list2))
         list1)))