(union): New compiler macro for emulating cl function. t-gnus-6_14_0-07
authoryamaoka <yamaoka>
Fri, 10 Dec 1999 08:38:55 +0000 (08:38 +0000)
committeryamaoka <yamaoka>
Fri, 10 Dec 1999 08:38:55 +0000 (08:38 +0000)
lisp/dgnushack.el

index 8aec2e5..e4cf885 100644 (file)
           (setq arg (cdr arg)))
         (apply (function nconc) (nreverse res))))))
 
+(define-compiler-macro union (&whole form list1 list2)
+  (if (and (fboundp 'union)
+          (subrp (symbol-function 'union)))
+      form
+    `(let ((a ,list1)
+          (b ,list2))
+       (cond ((null a) b)
+            ((null b) a)
+            ((equal a b) a)
+            (t
+             (or (>= (length a) (length b))
+                 (setq a (prog1 b (setq b a))))
+             (while b
+               (or (memq (car b) a)
+                   (push (car b) a))
+               (pop b))
+             a)))))
+
 ;; If we are building w3 in a different directory than the source
 ;; directory, we must read *.el from source directory and write *.elc
 ;; into the building directory.  For that, we define this function