I agree with Matthew here, also based on Java experiences.


On Feb 23, 2010, at 3:20 PM, Matthew Flatt wrote:

At Tue, 23 Feb 2010 14:09:02 -0500, Carl Eastlund wrote:
The one real issue I see is the name make-set.  I would much prefer
make-hash-set (with *eq and *eqv versions), which indicates explicitly
what kind of set it is, and leaves us open to future kinds of sets.

The flip side is that `make-set' doesn't commit to a particular
implementation --- just a particular equivalence predicate.


I think Java uses the `make-hash-set' strategy a lot, and I'm pretty
sure the following has happened to me on more than one occasion:

* I've wanted a Foo.

* I discover that Foo is an interface with specific implementations
  XFoo, YFoo, and ZFoo.

* It turns out that any of X, Y, or Z would work for my simple
  purposes, but I have to learn about them and pick one.

* I'd really rather just say `new Foo' and let someone else pick a
  good default implementation for me.

In contrast to Java, nothing prevents us from having `make-set' (the
equivalent of `new Foo') while later making `set?' an interface-like
predicate, should we eventually decide that the generality is
worthwhile.

Along similar lines, we could embed "equal" in the name `make-set', but
`equal?' is such a good default for the equivalence relation that it's
nicer in practice to just call it `make-set'.


Just like we don't call make-hash "make-dict", because there are many
kinds of dicts,

Does anyone use dictionaries other than hash tables? So far,
`scheme/dict' doesn't seem to be worth even the day or two I spent on
it.

The sequence generalization, in contrast, has definitely paid off. I
think it's because we so often need to combine different kinds of
sequences, such as iterating over a list and natural numbers in
parallel; otherwise, we'd just use `map', `vector-map', etc. I don't
see lots of applications that need to deal with two different
representations of sets at the same time, though.


Similarly for set-eq? and set-eqv?; we should have hash-set-eq? and
hash-set-eqv?, because these predicates don't mean anything for "sets"
in general.

It seems like the notion of equality used by a set is relevant to
operations on the set. What does it mean to union two sets that have
different notions of equivalent elements?



Again: I'm not going to stand in the way of anyone who wants to make
the `scheme/set' library more generalizable and extensible. But please
don't take away `make-set'.

_________________________________________________
 For list-related administrative tasks:
 http://list.cs.brown.edu/mailman/listinfo/plt-dev

_________________________________________________
 For list-related administrative tasks:
 http://list.cs.brown.edu/mailman/listinfo/plt-dev

Reply via email to