Re: Monkey-patching $quasi-value$
Per Bothner 25 Nov 2012 08:10 UTC
On 11/24/2012 07:07 PM, John Cowan wrote:
> Per Bothner scripsit:
>
>> The question is: Do we want there to be a default implementation of
>> ($quasi-value-transformer$:foo ...) as (foo ...)?
>
> And what is the default implementation of (foo ...)?
Error.
> We seem
> to be on an infinite regress, and I'd rather just stop at
> $quasi-value-transformer$:foo. And start there too.
Handly an infinite regress. But I agree the extra complication
of defining a default "fall-back" implementation of
$quasi-value-transformer$:foo seems marginal. I think it may
make sense to define one or more library functions to massage
the arguments - for example concatenating the components
of the literal part. These would be to make it combine the
argument list - or example combining the literal part to a
single string-valued expression.
> I propose this:
>
> (1') The reader returns ($quasi-value-transformer$:foo ...). If it
> was called from `read`, that's what the program gets. If it was called
> from a compiler or interpreter, it applies its normal rules to determine
> if $quasi-value-transformer$:foo is bound, and if not, takes its normal
> error recovery action, whatever that is.
That seems reasonable.
What do you think of ($construct$:foo ..) instead of the rather
ungainly ($quasi-value-transformer$:foo ...)?
> It is indeed, and (1') has the same advantage.
>
>> An implementation can then *optionally* provide a default
>> implementation and/or a mechanism to override the default.
>
> By the same token, a compiler or interpreter can have some default
> mechanism that recognizes symbols of this type and provides them with
> some default value or behavior.
Kawa has a few of these. For example CLASSNAME? becomes an instance test,
and NNNUNIT (e.g. 2.5cm) becomes a "quantity" (number-with-unit).
An implementation could have some fallback-mechnanism for $construct$:foo,
but I agree it doesn't seem worthwhile trying to standardize it.
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/