[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Package Question (Making NIL external).



;Given this package setup:

> (in-package :user)
> (make-package :my-cl :use '(:cl))
#<Package MY-CL 41305541>
>

;In the package MY-CL I shadow various symbols and add some new ones.  In
;order to allow users to "USE" my package and have access to the external
;common-lisp package symbols, my shadowed symbols and my other
;miscellaneous symbols I have been doing this:

(do-external-symbols (sym :cl) (export sym :my-cl))
NIL
> (export <my-new-symbols-list> :my-cl)
T
>

; Thus I want a user to be able to just "USE" my package and no others.
; However, if I make a new package and "USE" MY-CL like this:

(make-package :my-cl-user :use '(:my-cl))
#<Package MY-CL-USER 41305541>
>

;I get every symbol I'm supposed to EXCEPT FOR NIL.

(describe 'my-cl-user::nil)
MY-CL-USER::NIL is in the MY-CL-USER package.
MY-CL-USER::NIL
> (symbol-value 'my-cl-user::nil)
Trap: The variable MY-CL-USER::NIL is unbound.
> (intern "NIL" :my-cl-user)
MY-CL-USER::NIL
:INTERNAL
> 

;When I look at the symbol in the MY-CL package via intern it reveals
;that it is not external:

(intern "NIL" :my-cl)
MY-CL::NIL
:INHERITED
> (symbol-value 'my-cl::nil)
NIL

;Attempts to make NIL external via export fail:

(export (intern "NIL" :my-cl) :my-cl)
T
> (intern "NIL" :my-cl)
NIL
:INHERITED
>

#|

So, I guess my question is: "How can I make NIL an external symbol in my
own package?"  I assume it can be done since I can create a package
which "USES" the SCL package and I do get NIL.  What am I doing wrong?

	Steve

|#