(difference s1) (difference s1 s2) (difference s1 s2 & sets)
Return a set that is the first set without elements of the remaining sets
user=> (difference #{1 2 3})
#{1 2 3}
user=> (difference #{1 2} #{2 3})
#{1}
user=> (difference #{1 2 3} #{1} #{1 4} #{3})
#{2}
user=> (difference (set (keys {:1 1 :2 2 :3 3})) (set (keys {:1 1 :2 2})))
#{:3}
user=> (difference (set (keys {:1 1 :2 2})) (set (keys {:1 1 :2 2 :3 3})))
#{}
user=> (difference #{:a :b :c :d} (difference #{:a :b :c :d} #{:c :e :a :f :d}))
#{:a :c :d}
;; Though it might seem like you can use a vector as the second argument to
;; clojure.set/difference, this should be avoided in almost all situations in favor
;; of casting the vector to a set before calling clojure.set/difference. Otherwise
;; the behavior can appear correct in some situations but be very different from
;; what's expected in other situations:
(difference #{1 2 3} [1 2 3])
#{}
(difference #{1 2 3} [1 2])
#{3}
(difference #{1 2 3} [1 2 3 4])
#{}
(difference #{"1" "2" "3"} ["1" "2" "3"])
#{}
(difference #{"1" "2" "3"} ["1" "2"])
#{"3"}
(difference #{"1" "2" "3"} ["1" "2" "3" "4"])
#{"3" "1" "2"}
(difference #{0 1 2 3} [1 2 3 4 5])
#{}
(difference #{-1 0 1 2 3} [1 2 3 4 5 6])
#{-1}