I've stumbled upon one more issue.

In its current draft, the keywords in SRFI 177 are symbols and are used in this way in call/kw (keyword-call in the old draft).

The lambda/kw (keyword-lambda in the old draft) macro, however, interprets the keywords both as symbols and as identifiers. They are interpreted as symbols when the keyword list passed by call/kw is examined, but they are interpreted as identifiers when they are bound through let in the body of the procedure taking keyword arguments.

Without macro expansions, symbols and identifiers can be used interchangeably. With, however, there is a difference. Symbols are compared by `eq?', identifiers in let binding forms are compared by `bound-identifier=?'. In general, both equivalence predicates are not comparable.

Thus, in the most general contexts where lambda/kw can be used, there can be a problem. There will also at least be an inconvenience if a keyword argument is named in a way that would shadow an identifier used in the body of the procedure.

The simple solution is to slightly extend the system so that, for example,

(lambda/kw (a b (c d (f e))))

would mean to bind the identifier c to the keyword argument named c, the identifier d to the keyword argument named d, and the identifier f to the keyword argument e.

Marc