On Thu, 12 Mar 2009 12:45:00 -0700 (PDT)
Jason Wolfe <[email protected]> wrote:
> > Also, union/difference/intersection/symmetric-diff are binary. Would
> > there be any interest in a patch to make them n-ary?
> >
>
> Union, difference, and intersection are all variadic as of a month or
> so ago. Are you on the latest SVN?
>
> -Jason
Oops, so they are. I am actually on SVN but referred to (apparently)
out-of-date docs. That, or Rich has joined the circle of
time-machine-owning dynamic-language-designing BDFLs.
In that case, here's my two stabs at n-ary set symmetric difference:
(defn symmetric-diff [& sets]
(let [all-members (apply union sets)
nr-memberships
(fn [m] (apply + (for [s sets :when (contains? s m)] 1)))
in-sym-diff (fn [m] (odd? (nr-memberships m)))]
(set (filter in-sym-diff (seq all-members)))))
(defn symmetric-diff
([s1] s1)
([s1 s2]
(difference (union s1 s2)
(intersection s1 s2)))
([s1 s2 & sets]
(reduce symmetric-diff s1 (conj sets s2))))
-Kyle
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---