Re: Keyword arguments in procedures specified in SRFIs Lassi Kortela 22 Jul 2019 19:32 UTC
Thanks for joining in Peter! >> As a data type, are keywords a subtype of symbols or disjoint from them? I >> think they are generally a subtype, but they are disjoint in Chicken. > > They were a subtype, but that caused all sorts of confusion. Good points. Common Lisp sidesteps the problem because every CL symbol has both a symbol name (as in Scheme) and info about which package (i.e. namespace) it belongs to. So keywords are just symbols in the special KEYWORD package. Since they are in a separate package: * It's easy to for `let`, etc. to forbid binding them. * They can have the same names as other symbols without problems. E.g. (symbol-name :foo) and (symbol-name 'foo) both return "FOO". In Scheme, if keywords were a subtype of symbols, we'd have to think carefully about what (symbol->string) returns for keywords. * They do not compare equal to other symbols with the same name. Since symbols aren't divided into packages in Scheme, it does indeed seem difficult to think of a problem-free way to make keywords a subtype of symbols.