[racket] structure question

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sat Mar 19 10:10:15 EDT 2011

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




Posted on the users mailing list.