[racket] Problem writing and reading sets

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Sat Jul 6 02:01:17 EDT 2013

Hash tables are primitive types, whereas sets aren't, so there's no
built-in read syntax for sets.  Of course you could always write your own
reader for set values, but I recognize that may not be terribly
convenient.  As for serialize/deserialize, it's not clear to me whether
that introduces significant overhead compared to just read/write.  On one
hand, you do have to allocate the serialized form of the value; on the
other, the output itself is likely to be much shorter than the
human-readable version, and you will thus save on i/o costs.

Carl Eastlund

On Sat, Jul 6, 2013 at 1:21 AM, Wayne Iba <iba at westmont.edu> wrote:

> Thanks, Carl.  I'd like to avoid the overhead of serialize/deserialize.  I
> guess I missed that sets were in a different category than hashes with
> respect to this question.  (I was assuming that since I can read in the
> write of a hash as a hash, I could do the same with sets.  Is there a
> particular reason that's not the case?)
>
>
> On Fri, Jul 5, 2013 at 1:35 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
>
>> Wayne,
>>
>> You cannot read in a set.  If you read in the result of print, you get
>> '(set 1 2 3), which is a list beginning with the symbol 'set, not a set.
>> Sets are a derived datatype using structs, not a primitive on recognized by
>> read and write.  You can use the functions serialize and deserialize to
>> store sets, if you need to.
>>
>> --Carl
>>
>> On Fri, Jul 5, 2013 at 3:41 PM, Wayne Iba <iba at westmont.edu> wrote:
>>
>>> If I evaluate (write myset) for myset as (set 1 2 3), the format of the
>>> output is "#<set: 1 2 3>", whereas (print myset) produces "(set 1 2 3)".
>>> Naturally, I can read in the latter but not the former.  From the docs, I
>>> believe the expectation is that we can rely on the output of write for
>>> reading, but not necessarily that of print.
>>>
>>> Am I missing something here or is this a problem with how racket is
>>> writing sets?  (I'm using v5.3.5)
>>>
>>> Thanks,
>>> --Wayne
>>>
>>> ____________________
>>>   Racket Users list:
>>>   http://lists.racket-lang.org/users
>>>
>>>
>>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130706/92edaffa/attachment.html>

Posted on the users mailing list.