On the disjoiintness of keywords and symbols, and compatibility...
Gauche used to have keywords disjoint from symbols, noted :foo. It's not conforming rnrs, though, so we switched keywords
to be symbols (to be precise, of a subtype of the symbol type). However, there's a library (gauche keyword), in which
all symbols beginning with ':' are pre-bound to itself.
So you can write:
(import (gauche keyword))
(foo :foo 1 :bar 2)
If you don't want to import (gauche keyword), you can still call keyword-accepting procedure by quoting keywords:
(foo ':foo 1 ':bar 2)
If you want to bind a symbol beginning with ':' and want to use keywords as well:
(import (except (gauche keyword) :foo))
(define :foo "foo")
If you do this, you have to quote :foo if you mean it to be a keyword arguments, but you know what you're doing in
that scope.