[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Printing recursive objects
From: |
Evan Hanson |
Subject: |
Re: [Chicken-users] Printing recursive objects |
Date: |
Wed, 24 Sep 2014 16:00:29 -0700 |
User-agent: |
OpenSMTPD enqueuer (Demoosh) |
Hi Richard,
On 2014-09-24 21:34, Richard wrote:
> If I have an object that references itself, like for example...
>
> (define v (vector 0))
> (vector-set! v 0 v)
>
> and I print it, chicken goes -understandably- into an infinite loop.
>
> Is there a way to prevent this, or is there something like
> define-record-printer for non-record objects.
FWIW there are `display` and `write` procedures in the scheme.write
library of the r7rs egg that handle such objects. That module is
self-contained and can be used without pulling in the rest of r7rs:
#;1> (use scheme.write)
; loading /home/evanh/.chickens/master/lib/chicken/7/scheme.write.import.so
...
; loading /home/evanh/.chickens/master/lib/chicken/7/chicken.import.so ...
; loading /home/evanh/.chickens/master/lib/chicken/7/scheme.write.so ...
#;2> (define v (vector 0))
#;3> (vector-set! v 0 v)
#;4> (display v)
#0=#(#0#)
Even so, csi's built-in writer will still loop on `v` if you don't
explicitly print it. Maybe that behavior should also change when
scheme.write is loaded, hmmm...
Evan