On 2013-03-24, at 1:16 PM, Jason Felice jason.m.felice@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