(intersection s1)
(intersection s1 s2)
(intersection s1 s2 & sets)
Return a set that is the intersection of the input sets
Source
(defn
intersection
"Return a set that is the intersection of the input sets"
([s1] s1)
([s1 s2]
(if
(< (count s2) (count s1))
(recur s2 s1)
(reduce
(fn
[result item]
(if (contains? s2 item) result (disj result item)))
s1
s1)))
([s1 s2 & sets]
(let
[bubbled-sets
(bubble-max-key
(fn* [p1__18457#] (- (count p1__18457#)))
(conj sets s2 s1))]
(reduce intersection (first bubbled-sets) (rest bubbled-sets)))))