PDA

View Full Version : Find if list items are the same


TobyKanoby
2007-06-16, 12:30 AM
Is there an easy way to find if list items are the same?
With "=" I get the following return.

Command: (= 2.5 2.5 2.5) = T
Command: (= 2.5 2.7 2.5) = nil

Command: (setq lst1 (list 2.5 2.5 2.5)) = '(2.5 2.5 2.5)
Command: (setq lst2 (list 2.5 2.7 2.5)) = '(2.5 2.7 2.5)

Command: (progn(setq same t)(foreach num lst1(if(/= num(car lst1))(setq same nil)))same) = T
Command: (progn(setq same t)(foreach num lst2(if(/= num(car lst2))(setq same nil)))same) = nil

Then I came across this vl-every function.
Command: (vl-every '= lst1 (cdr lst1)) = T
Command: (vl-every '= lst2 (cdr lst2)) = nil
Is this the best function to use?

CAB2k
2007-06-16, 06:28 PM
(vl-every '= '(2.5 2.5 2.5) '(2.5 2.5 2.5))
T
(equal '(2.5 2.5 2.5) '(2.5 2.5 2.5))
T

(vl-every '= '(2.5 2.5 2.5) '(2.5 2.3 2.5))
nil
(equal '(2.5 2.5 2.5) '(2.5 2.7 2.5))
nil

(vl-every '= '(2.5 2.5 2.5) '(2.5 2.5 2.5 3.0))
T
(equal '(2.5 2.5 2.5) '(2.5 2.5 2.5 3.0))
nil

(vl-every '(lambda(x y) (= x y)) '(2.5 2.5 2.5) '(2.5 2.5 2.5))
T

(vl-every '(lambda(x y) (= x y)) '(2.5 2.5 2.5) '(2.5 2.7 2.5))
nil

(vl-every '(lambda(x y) (= x y)) '(2.5 2.5 2.5) '(2.5 2.5 2.5 3.0))
T

CAB2k
2007-06-16, 07:16 PM
Another way:
(defun Return_Unique_Items (lst1 lst2)
(append (vl-remove-if '(lambda (x) (member x lst1)) lst2)
(vl-remove-if '(lambda (x) (member x lst2)) lst1))
)