[plt-scheme] keywords (a backward-incompatible change)
On Oct  1, Eli Barzilay wrote:
> SRFI-42 is the most problematic piece of code.  Ryan suggested that
> it is easy to solve using a #k- prefix for the code, and requiring
> it with a prefix in code that wants to use it without #k-.  (Minor
> ugliness: if you use a `foo:' prefix, you'll get some `foo::blah'
> identifiers there.)  In any case, identifiers that end with a colon
> are also valid in r5rs, so suffix just shifts the problem elsewhere.
> The majority of :foo uses in identifier names are ones that are
> *supposed* to behave like keywords, so the change is mostly trivial.
> SRFI-42 is a major exception.
I (partially) take this back.  It seems that in the SRFI-42
implementation, :foo syntaxes are ones that should only be used in a
comprehension macro -- the actual use of the :macro is changed so that
a continuation macro is planted in that use, this is in this clause of
`do-ec':
     (do-ec (g arg1 arg ...) cmd)
     ->
     (g (do-ec:do cmd) arg1 arg ...)
So it seems like it would be easy to insert one more step to this
chain:
     (do-ec (g arg1 arg ...) cmd)
     ->
     (unkeywordify g (do-ec:do cmd) arg1 arg ...)
and make `unkeywordify' a syntax-case macro that will do this
transformation:
     (unkeywordify :foo rest ...)  ; :foo is some keyword
     ->
     (\:foo rest ...)              ; using the identifier \:foo instead
I think that this may work fine.
-- 
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                  http://www.barzilay.org/                 Maze is Life!