On Fri, 10 Feb 2006 06:25:45 -0700 (MST), Jim Prewett download@hpc.unm.edu wrote:
I'm guessing this is what I just ran into and the answer is your new function names and symbols will be interned in :CL-USER :) I'd love to know how to change that, but haven't bothered to dig yet. (in my case, :CL-USER would be my second choice after one of my own packages)
In my case, I had code that uses the multi-method dispatch mechanism to display the right page (I'm not yet sure if thats a good idea :) something like this:
(defmethod display-page (page-name (eql 'login-page)) ... )
To convert the text strings given by the user into the right symbol (so this dispatch mecnhanism can work), I must intern them in the :CL-USER package.
This did take me a while to figure out and *I* couldn't find it in the documentation anywhere. (I guess, maybe, it should have been obvious, but I still consider myself mostly a Lisp newbie). I believe my CMUCL Lisp starts with a core file causing it to start in :Jims-PackageA, then I've been loading a file (that causes TBNL and all that good stuff to be loaded) and immediately switching to :Jims-PackageB, so it was really confusing to be using the :CL-USER package at all. :)
Hmm. It /seems/ to me that both of you are rather talking about general problems with packages and not about TBNL in particular. TBNL itself never interns symbols except when it creates keywords, and in this case the package is clearly defined.
You should always create your own package to work in if you write code, don't use CL-USER. See test.lisp in TBNL for an example.
If your code looks like this
(defmethod display-page (page-name (eql 'login-page)) ... )
then LOGIN-PAGE will be a symbol accessible in the package you're in, i.e. the package of the file the method is defined in (assuming you used LOAD to load the file). In 99.9% of all cases this should be the package you find in the very first line starting with IN-PACKAGE. If you don't have such a line there - see above... :)
Sorry if that sounds patronizing, maybe I'm again missing the point.
Cheers, Edi.