[racket] structure question

From: Manfred Lotz (manfred.lotz at arcor.de)
Date: Sat Mar 19 05:29:38 EDT 2011

On Wed, 8 Dec 2010 16:13:08 -0500
Matthias Felleisen <matthias at ccs.neu.edu>

> ;;
> ----------------------------------------------------------------------------- ;;
> 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.

(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 ===

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.



Posted on the users mailing list.