I'm starting to get lost in all these options.  Here's how I think things should look:

        (call/kw name expr ... marker :kw expr :kw  expr ...)

I don't care exactly what the marker is.  But this way it looks exactly like a normal function call except for the leading call/kw and the marker.  If a user thinks call/kw is too verbose, it's easy to write a syntax-rules macro that lets you use a shorter (or even longer) name.

I also don't care if the keyword identifiers have colons in them or not.

And by the same token:

        (lambda/kw (identifier ... marker identifier ...) . body)

Again, it looks as much like plain lambda as it possibly could.

Thirdly, I would also like this:

        (define/kw (procname identifier ... marker identifier ...) . body)

What do you think of this design?  It sacrifices the possibility of a syntax-rules implementation, and it doesn't allow for these mythical hygienic keywords, but I don't care about either of these points.  Because this is simple to use.

Question:  You can use apply to call a kw-procedure with no keywords.  Does that also mean you can call it directly without call/kw?



John Cowan          http://vrici.lojban.org/~cowan        xxxxxx@ccil.org
Being understandable rather than obscurantist poses certain
risks, in that one's opinions are clear and therefore falsifiable
in the light of new data, but it has the advantage of encouraging
feedback from others.  --James A. Matisoff