[plt-scheme] Printing Structures without using custom-write
On Oct 10, Sam TH wrote:
> On 10/10/07, Eli Barzilay <eli at barzilay.org> wrote:
> > On Oct 10, Sam TH wrote:
> > > On 10/10/07, Eli Barzilay <eli at barzilay.org> wrote:
> > > > On Oct 10, Sam TH wrote:
> > > > > I have this already, because it would be very hard to some things
> > > > > otherwise. But it's not a total solution - you can't debug your write
> > > > > handler with printf, because you immediately get an infinite loop.
> > > > >
> > > > > Also, it requires having all your structures defined with a macro that
> > > > > expands to define-struct, which is the case for me, but limits the
> > > > > applicability of the technique.
> > > >
> > > > Can't you have a parameter that conrols your own output, and based on
> > > > that your printers will spit out the nice output or something that
> > > > looks like the standard output?
> > >
> > > Yes, but then you have to re-implement the standard printer.
> >
> > ...which is a one liner, so it shouldn't be a problem in practice.
>
> This is false. It's one line per structure, which is significant for
> any complex set of structs.
(define simple-output (make-parameter #f))
(define (printer-wrapper printer)
(lambda (obj port write?)
(if (simple-output)
((if write? write display) (struct->vector obj) port)
(printer obj port write?))))
...And all you need is to wrap your printers.
> > Conceptually, there may be future extensions to struct printing that
> > you'll want to have -- but even with that I think that if you want
> > your own output then you should go all the way with that.
>
> I don't even understand what you're suggesting here.
>
> Perhaps I didn't make my point clearly enough in my original
> message. Mzscheme doesn't currently provide a way to print structs
> without using custom-write procedures. Before I implement such a
> way, I'm interested in people's feelings on the design of such a
> feature.
I don't understand that. What's wrong with what it prints by default?
Or are you talking about readable printouts (which requires
serialization of random values).
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://www.barzilay.org/ Maze is Life!