I can see the points being made, and now I'm also thinking that accepting
infinite sequences wouldn't always work, for example if the infinite
sequence wouldn't contain one of the elements of one of the other
sequences, like:
(clojure.set/intersection #{1 2} (drop 10 (range)))
And I'm not sure it would be acceptable for a function that accepts
sequences to hang depending on the input.
Which also makes me wonder: shouldn't intersection throw a "cannot be cast
to clojure.lang.IPersistentSet" when called with (range), rather than
consume all memory and crash the jvm ?
I still think though that accepting sequences rather then sets could be
worth consideration for other reasons:
- vectors would just work without having to call set on them:
(clojure.set/intersection
[2 3 4] [4 5 6]) (I think duplicate elements shouldn't cause problems)
- it would also work on maps
- sets can be treated as sequences, and operating on sequences whenever
possible is very idiomatic in Clojure
- no previous code would be broken, neither should performance decrease and
maybe increase by removing the calls to count
- the doc would simply change to "Returns a set with the elements in common
between the input seqs."
- the implementation would call contains? if the sequence is a set, for
performance reasons, and would call (some #{el} seq) otherwise
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.