[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: define-reader-ctor is merely an implementation hint



> > The only way to supply contructor functions in SRFI-10 is by doing
> > (define-reader-ctor <symbol> <proc>).
> 
> No. The only requirement SRFI-10 mandates is that "There must be a way
> to declare an association between a symbolic tag and the corresponding
> constructor-procedure." SRFI-10 goes on to _suggest_ that an
> implementation may want to implement a define-reader-ctor function for
> that purpose. SRFI-10 does not say that define-reader-ctor is the
> required method to build tag-constructor associations, let alone that
> it is the only method (see also below).

There is another alternative for defining the constructors within the
source code.  You could simply use the #,(...) form itself to perform
a definition while the program is being read.  For example you could:

'#,(define-reader-ctor 'box list)
'#,(define-reader-ctor 'f32 f32vector)

(define x '(things #,(box 123) #,(f32 1.0 2.0 3.0)))

Note that this assumes that define-reader-ctor is itself declared
as a reader constructor.

This doesn't solve the problem of specifying to the compiler any
non-standard procedures that are to be passed to define-reader-ctor,
but at least it will work when the constructors can be expressed in
standard Scheme.

I don't actually like this approach, but I mention it for the record.

Marc