[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] Legacy caar to cddddr
| Date: Thu, 20 Oct 2011 13:45:51 -0400
| From: John Cowan <cowan@x>
| Ray Dillinger scripsit:
| > It was possible to implement a general macro version (that parsed
| > the token and expanded it as far as necessary) of the "c(a|d)+r"
| > operators using the old "explode" and "implode" commands to
| > destructure the symbol itself, but those have been eliminated
| > since, I think, R4RS. And I don't think it would work with
| > current macrology anyway.
| Surely it would not.
| I once wrote a traditional Lisp (not Scheme or CL) interpreter once
| that handled these directly in EVAL. If a symbol in operator
| position had no definition, it was checked for being of the right
| form, and if so, its argument was evaluated and the c*r was
| executed on the spot. It didn't work in APPLY, more by oversight
| than anything else.
In SCM, C*R and single-argument real-valued numerical functions (both
have type-code tc7_cxr) are dispatched in the interpreter. The C*R
objects have a null CDR; their dispatch is based on their symbol
strings. Apply executes them correctly as well.
In JACAL, polynomials are lists (of variable and coefficients) so that
polynomial operations use the fastest operations that SCM (and other
Scheme implementations) offers. Changing polynomials to boxed record
types would have a disastrous impact on memory usage, cache locality,
and execution speed of JACAL.
Scheme-reports mailing list