[Gardeners] How to name symbols
Larry Clapp
larry at theclapp.org
Sat Apr 29 10:46:51 CDT 2006
On 2006-04-29, Pascal Bourguignon wrote:
> Stuart Sierra writes:
>> I was thinking, as I wrote about colon syntax (glad people liked
>> it, by the way) that it would be helpful to explain the various
>> ways of identifying symbols by name when creating packages and the
>> like. Many standard macros accept 1) normal interned symbols, 2)
>> keyword symbols, 3) uninterned symbols, or 4) strings. I think the
>> HyperSpec calls these arguments "designators."
>>
>> It's not always clear which form one should use, and different
>> styles abound. Is there a "standard" way?
>
> Well, it works by elimination.
[snip]
> Since writing a keyword is easier than writing a string, for
> interactive use, it's acceptable to use keywords instead of strings,
> but in programs, I always use strings, to avoid growing indefinitely
> the KEYWORD package.
Note that this relies on some standard readtable assumptions. In
particular, the reader usually upcases symbols
this => THIS
ThIs => THIS
THIS => THIS
so when you use strings you say "THIS", but when you use symbols (be
they interned, un-interned, or keyword), the reader does whatever it
does.
This can cause you trouble in some non-standard Lisps' "standard" (for
them) readtable which does no case conversion
this => |this|
ThIs => |ThIs|
THIS => |THIS|
which is why, for example, Slime[1] had to change from using "STRINGS"
to using #:uninterned-symbols, so it would work with Franz's[1]
"modern mode".
Another vote on keywords: they only "pollute" the keyword package of
the image you compile in. If you compile to a fasl, restart, and then
load the fasl, that doesn't pollute the keyword package. I think
Peter already mentioned this.
I tend to use uninterned keywords for my DEFPACKAGEs.
-- Larry
[1] (I think)
More information about the Gardeners
mailing list