[racket] structure question
Read delivers an S-expression. You need to turn it into a structure again
On Mar 19, 2011, at 5:29 AM, Manfred Lotz wrote:
> On Wed, 8 Dec 2010 16:13:08 -0500
> Matthias Felleisen <matthias at ccs.neu.edu>
> wrote:
>
>
>> ;;
>> ----------------------------------------------------------------------------- ;;
>> usage example (could be separate module) (define detail-default "?")
>> (struct/kw book (author title [details detail-default]) #:transparent)
>>
>> (define book1 (book/kw #:title "The Client" #:author "John Grisham"))
>>
>> (define book2 (book/kw #:title "The Client" #:author "John Grisham"
>> #:details "?"))
>>
>> (string=? (book-author book1) "John Grisham")
>> (string=? (book-details book2) "?")
>>
>>
>
> If for instance I write book1 to a file (using write) and read it back
> using read this works fine.
>
> However, if I then try to use it as a struct/kw this will fail.
> Example:
>
> (call-with-output-file "books"
> (lambda (out) (write book1 out)))
>
> ; works fine
> (define bookx (call-with-input-file "books"
> (lambda (in) (read in))))
>
> ; gives error
> (string=? (book-author book1) (book-author bookx))
>
>
> book-author: expects argument of type <struct:book>; given
> '#(struct:book "John Grisham" "The Client" "")
>
> === context ===
> /usr/lib/racket/collects/racket/private/misc.rkt:85:7
>
>
> Indeed they are different:
>
>> book1
> (book "John Grisham" "The Client" "")
>> bookx
> '#(struct:book "John Grisham" "The Client" "")
>
>
> Can this be solved within the definition of struct/kw or do I have to
> work around it.
>
>
>
> --
> Manfred
>
>
>
>
>
>
> --
> Manfred
>
>
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users