Subject: Re: [not so] basic package question
From: Erik Naggum <>
Date: Sat, 27 Apr 2002 00:22:20 GMT
Newsgroups: comp.lang.lisp
Message-ID: <>

* james anderson <>
| the responses have convinced me that matters of symbol name case are not
| trivial and that i should presume as little as possible about internal
| symbol representation.

  Well, while this is a valid conclusion, I think you should just know that
  unless you work _very_ hard to make it otherwise, the standard mandates
  upper-case internal symbol names, and you should _never_ expect to find a
  symbol in all lower-case in the package named "COMMON-LISP".

  We have no mechanism that could support symbol forwarding in Common Lisp,
  although it could have been a good thing to have, such that you could
  rename symbols upon import to a new package.  Such a feature could have
  been used to make lower-case "clones" of symbols.  (One _could_ hack the
  package hashtables to fake this effort.)

| the problematic program generates marshalling functions and macros from
| document type definitions and schema.  these functions include numerous
| pairs, one a macro and one a generic function, which produce an encoded
| markup stream.  they differ primarily in that the macro version makes
| more decions at compile time about what and how to encode things.  i had
| been generating the respective symbols in the same package, inverting the
| case of one or the other of them in accord with readtable case.  i
| believe that method is portable.  despite that, it is not as robust as it
| could be.

  Well, it is.  The readtable case is not where you want to look at this.

| it would be better to allow one to specify destination packages and cases
| for the respective symbols when the marshalling functions are generated
| from the definitions. the default settings would be carried over from
| readtable case, but it would be possible to accommodate other approaches.

  "Destination packages"?  Hm.  This weird expression _may_ indicate a lack
  of understanding of the package system.  I hope you are aware that the
  way to control the package into which the reader will intern symbols when
  they have no package qualification is controlled by the value of the
  special variable *package*.  If you are not using the reader to read
  Common Lisp code with symbols that (may) live in the common-lisp package,
  you may use any case you want for your own symbols and adjust the
  readtable-case so it fits your needs.  There is nothing in Common Lisp
  that requires your own symbols to be in upper-case, it is just massively
  convenient when also working with symbols in the common-lisp package.

  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.

  Post with compassion: