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