> (define-syntax +
> (lambda (stx)
> (syntax-case stx ()
> ((_ x y) #'(fast-binary-plus x y))
> (_ #'slow-general-plus))))
>
> Except that it will now be impossible to use (apply + '(1 2 3 4)),
> unless you have a non-standard Scheme that allows both syntax and
> variable bindings for the same identifier.
I don't understand this. If the identifier syntax expands to a lambda,
does something in Scheme prevent you from passing that lambda to
`apply`? Or is `+` not macro-expanded in that position inside `apply`?
> Being able to apply
> procedures to a programmatically generated list of arguments is a
> standard and important part of functional languages. In addition, it
> becomes impossible to put + into a data structure.
Agree that these are extremely important.
> CL has this feature, named "compiler macros"; they override a function
> binding in the compiler, but do not affect any use of the function
> object at run time. From what I understand, they are not heavily used.
They are perhaps even more of a a last resort than macros in general.
IIRC the SICL implementation bases a substantial part of its internals
on compiler macros, but don't quote me (no pun intended).