Re: Alternative formulations of keywords Marc Feeley 12 Apr 2006 05:11 UTC

On 12-Apr-06, at 12:32 AM, John Cowan wrote:

> I agree that my proposal #1 will not work when the function to be
> called is not known at compile time.  However, I don't mind if it
> doesn't work in every case, since the equivalent form for which the
> keywords are a shorthand is always well-defined, if awkward.

If you try to formalize the cases in which it does work and the cases
in which it doesn't you will realize that it is very hard to specify
precisely.  You have to assume a particular set of powerful analyzes
that are performed by the compiler, and your semantics will depend on
the existence of these analyzes.  This places difficult constraints
on the Scheme implementation.

For example can your proposed approach work in this case:

    (define (f g)
      (g foo: 11 bar: 22))

or in this case:

    (define (f #!key (x 11) (y 22)) (+ x y))
    (define (g z) (f y: z))
    (define (h) (set! f (lambda (#!key (y 33) (z 44)) (* y z))))