Re: First cut at "curly-write" and "neoteric-write" with -shared and -cyclic versions
David A. Wheeler 02 May 2013 22:46 UTC
Beni Cherniavsky-Paskin <xxxxxx@users.sf.net> wrote:
> I'm getting some errors [guile 2.0.7]:
Thanks for the report! I don't have guile 2.0.7 (yet); so this is a new problem to me.
...
> -#0=(quote . #0#)
> +'x
Hmm.. This report means that when (all) the writers were asked to
write out "(quote x)", they output:
#0=(quote . #0#)
Instead of the correct:
'x
Clearly the writers are getting it *completely* wrong.
What's weird is that the code works on older versions of guile, and it's based on
fairly well-tested code. I'm also surprised the more complicated cases worked (!).
My guess is that there's a semantics issue with the hash table implementation.
If the hash table thought that the outer list and the symbol x were "eq?"... or used the
wrong equality operator so they'd be considered equal... then the code would do this.
Guile supports several hash table systems; I used the SRFI-69 hash tables because
they are especially portable. But I did have to use a special declaration to get srfi-69
hash tables in guile without lots of spurious warnings.
Perhaps that special declaration no longer works in guile 2.0.7.
Can you replace the current lines:
(use-modules ((srfi srfi-69)
#:select ((make-hash-table . srfi-69-make-hash-table)
(hash-table? . srfi-69-hash-table?)
hash-table-set!
hash-table-update!/default
hash-table-ref
hash-table-ref/default
hash-table-walk
hash-table-delete! )))
with just:
(use-modules (srfi srfi-69))
and try again with guile 2.0.7?
The guile 2 manual says that this is the correct way to import srfi-69:
http://www.gnu.org/software/guile/manual/html_node/SRFI_002d69.html#SRFI_002d69
--- David A. Wheeler