<p dir="ltr">But 'list-union' is not a generic operation so it isn't surprising that this didn't work. To do this generically, you'd need to use 'set-union'.</p>
<p dir="ltr">Sam</p>
<div class="gmail_quote">On Aug 22, 2013 7:59 AM, "J. Ian Johnson" <<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The problem manifested itself when I got an exception that in-list can't be called on (set), which really confused me. (set? '()) answered true, so it tried to do (list-union '() (set)), which failed.<br>
Generic sets as they are don't work generically. Some action should be taken. Either set? means what it once did, or we do some awfully slow multiple dispatch for set operations. My bias shows.<br>
-Ian<br>
----- Original Message -----<br>
From: "Matthew Flatt" <<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>><br>
To: "Carl Eastlund" <<a href="mailto:cce@ccs.neu.edu">cce@ccs.neu.edu</a>><br>
Cc: "J. Ian Johnson" <<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>>, "dev" <<a href="mailto:dev@racket-lang.org">dev@racket-lang.org</a>><br>
Sent: Thursday, August 22, 2013 7:22:25 AM GMT -05:00 US/Canada Eastern<br>
Subject: Re: [racket-dev] Lists aren't sets, but have set-like operations<br>
<br>
How much should we prioritize backward compatibility in this case?<br>
<br>
One possibility is to make `set?' mean `hash-set?', and add<br>
`generic-set?' in place of the current `set?'. That's uglier,<br>
obviously, but it would be better if we want to prioritize backward<br>
compatibility.<br>
<br>
At Wed, 21 Aug 2013 19:14:06 -0400, Carl Eastlund wrote:<br>
> Ah, yes. The set? predicate no longer distinguishes a representation.<br>
> There are several predicates for the original set type, now called "hash<br>
> sets": set-eq?, set-eqv?, set-equal?, set-mutable?, set-immtuable?, and<br>
> set-weak?. I didn't add the basic "hash-set?", but perhaps I should. It's<br>
> a weird name, since "hash-set" and "hash-set!" are already existing,<br>
> unrelated functions.<br>
><br>
> Carl Eastlund<br>
><br>
><br>
> On Wed, Aug 21, 2013 at 7:08 PM, J. Ian Johnson <<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>> wrote:<br>
><br>
> > Okay, I can abide. However, that doesn't really get at my frustration. I'm<br>
> > using the set constructor, that appears to now be an immutable-custom-set<br>
> > with make-immutable-hash as its make-table. So what I'm looking for is not<br>
> > set?, but set-immutable?, as it's a distinct (family of) struct types that<br>
> > won't clash with the primitive data that I'm otherwise using.<br>
> > -Ian<br>
> > ----- Original Message -----<br>
> > From: "Carl Eastlund" <<a href="mailto:cce@ccs.neu.edu">cce@ccs.neu.edu</a>><br>
> > To: "J. Ian Johnson" <<a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a>><br>
> > Cc: "dev" <<a href="mailto:dev@racket-lang.org">dev@racket-lang.org</a>><br>
> > Sent: Wednesday, August 21, 2013 6:58:56 PM GMT -05:00 US/Canada Eastern<br>
> > Subject: Re: [racket-dev] Lists aren't sets, but have set-like operations<br>
> ><br>
> ><br>
> > Ian, sets are now a generic datatype, like dictionaries. Association lists<br>
> > are dictionaries, and lists are now sets. They're also streams and<br>
> > sequences. They're not just "set-like".<br>
> ><br>
> ><br>
> ><br>
> > Carl Eastlund<br>
> ><br>
> ><br>
> > On Wed, Aug 21, 2013 at 6:56 PM, J. Ian Johnson < <a href="mailto:ianj@ccs.neu.edu">ianj@ccs.neu.edu</a> ><br>
> > wrote:<br>
> ><br>
> ><br>
> > I just wasted about 2 hours tracking down a bug that ended up being due to<br>
> > (set? '()) now evaluating to #t. I have no problems with set-union,<br>
> > intersection, etc. being defined for lists, but to treat lists as sets<br>
> > always is perverse to me. The contracts for set operations should use<br>
> > set-like? for (or/c set? list?) and keep the two constructions separate.<br>
> ><br>
> > This conflation is almost as bad as treating empty list as false.<br>
> ><br>
> > -Ian<br>
> > _________________________<br>
> > Racket Developers list:<br>
> > <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
> ><br>
> ><br>
> ><br>
> ><br>
> _________________________<br>
> Racket Developers list:<br>
> <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
_________________________<br>
Racket Developers list:<br>
<a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</blockquote></div>