[gambit-list] Foreign object printers?
Marc Feeley
feeley at iro.umontreal.ca
Sun Mar 24 13:43:38 EDT 2013
On 2013-03-24, at 1:16 PM, Jason Felice <jason.m.felice at gmail.com> wrote:
> Whats macro-writeenv-style and ##wr-mark about?
The style field of a writeenv indicates the style in which the object is to be written. Currently the style can be
- write (11 "abc" 22) is written as: (11 "abc" 22)
- display (11 "abc" 22) is written as: (11 abc 22)
- print (11 "abc" 22) is written as: 11abc22
- pretty-print uses indentation/line breaks for pretty printing
- mark used by #n=... notation
So the mark style is special in that it does not produce output. It is used when the readtable-sharing-allowed? flag is set:
> (define (wr obj allow?)
(call-with-output-string
'()
(lambda (p)
(output-port-readtable-set!
p
(readtable-sharing-allowed?-set
(output-port-readtable p)
allow?))
(write obj p))))
> (wr (let ((x (cons 11 22))) (list x x)) #f)
"((11 . 22) (11 . 22))"
> (wr (let ((x (cons 11 22))) (list x x)) #t)
"(#0=(11 . 22) #0#)"
The write/display/print/pretty-print procedures will make a first pass over the object/subobjects with style=mark. This is to gather in a table all the subobjects to write. Then, during the second pass, the #n=... notation will be used when an object has been marked more than once during the mark pass.
Marc
More information about the Gambit-list
mailing list