[racket-dev] Lists aren't sets, but have set-like operations

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Thu Aug 22 09:02:28 EDT 2013

In addition to this backwards-compatibility issue, I also wonder if there
are others we've possibly missed that we should also consider (and perhaps
try to find alternatives for)?

I imagine there are a bunch that turn errors into non-errors that we could
decide to deal in one fell swoop (to just accept), but are there others
like the change in the behavior of the current "set?"?

Robby


On Thu, Aug 22, 2013 at 6:22 AM, Matthew Flatt <mflatt at cs.utah.edu> wrote:

> How much should we prioritize backward compatibility in this case?
>
> One possibility is to make `set?' mean `hash-set?', and add
> `generic-set?' in place of the current `set?'. That's uglier,
> obviously, but it would be better if we want to prioritize backward
> compatibility.
>
> At Wed, 21 Aug 2013 19:14:06 -0400, Carl Eastlund wrote:
> > Ah, yes.  The set? predicate no longer distinguishes a representation.
> > There are several predicates for the original set type, now called "hash
> > sets": set-eq?, set-eqv?, set-equal?, set-mutable?, set-immtuable?, and
> > set-weak?.  I didn't add the basic "hash-set?", but perhaps I should.
>  It's
> > a weird name, since "hash-set" and "hash-set!" are already existing,
> > unrelated functions.
> >
> > Carl Eastlund
> >
> >
> > On Wed, Aug 21, 2013 at 7:08 PM, J. Ian Johnson <ianj at ccs.neu.edu>
> wrote:
> >
> > > Okay, I can abide. However, that doesn't really get at my frustration.
> I'm
> > > using the set constructor, that appears to now be an
> immutable-custom-set
> > > with make-immutable-hash as its make-table. So what I'm looking for is
> not
> > > set?, but set-immutable?, as it's a distinct (family of) struct types
> that
> > > won't clash with the primitive data that I'm otherwise using.
> > > -Ian
> > > ----- Original Message -----
> > > From: "Carl Eastlund" <cce at ccs.neu.edu>
> > > To: "J. Ian Johnson" <ianj at ccs.neu.edu>
> > > Cc: "dev" <dev at racket-lang.org>
> > > Sent: Wednesday, August 21, 2013 6:58:56 PM GMT -05:00 US/Canada
> Eastern
> > > Subject: Re: [racket-dev] Lists aren't sets, but have set-like
> operations
> > >
> > >
> > > Ian, sets are now a generic datatype, like dictionaries. Association
> lists
> > > are dictionaries, and lists are now sets. They're also streams and
> > > sequences. They're not just "set-like".
> > >
> > >
> > >
> > > Carl Eastlund
> > >
> > >
> > > On Wed, Aug 21, 2013 at 6:56 PM, J. Ian Johnson < ianj at ccs.neu.edu >
> > > wrote:
> > >
> > >
> > > I just wasted about 2 hours tracking down a bug that ended up being
> due to
> > > (set? '()) now evaluating to #t. I have no problems with set-union,
> > > intersection, etc. being defined for lists, but to treat lists as sets
> > > always is perverse to me. The contracts for set operations should use
> > > set-like? for (or/c set? list?) and keep the two constructions
> separate.
> > >
> > > This conflation is almost as bad as treating empty list as false.
> > >
> > > -Ian
> > > _________________________
> > > Racket Developers list:
> > > http://lists.racket-lang.org/dev
> > >
> > >
> > >
> > >
> > _________________________
> >   Racket Developers list:
> >   http://lists.racket-lang.org/dev
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20130822/c5f0d391/attachment.html>

Posted on the dev mailing list.