Any sequence can be used as a set. The members of this set are the elements of the sequence. Calling the word members
on a sequence returns a copy of the sequence with only one listing of each member. Destructive operations adjoin
only work properly on growable sequences like vector
Care must be taken in writing efficient code using sequence sets. Testing for membership with in?
, as well as the destructive set operations, take time proportional to the size of the sequence. Another representation, like Hash sets
, would take constant time for membership tests. But binary operations like union
are asymptotically optimal, taking time proportional to the sum of the size of the inputs.
As one particular example, f
is a representation of the empty set, since it is an empty sequence.