(defun symbol-information (symbol)
(let* ((name (symbol-name symbol))
(package (symbol-package symbol))
(status (nth-value 1 (find-symbol name package))))
(values status name package)))
but this seems like such a waste.
since the Lisp printer must determine whether a symbol is accessible in the
default package or internal or external in some package all the time, I'd
thought I could have access to that information, too. suggestions?
(I'm aware of the `with-package-iterator' macro, which uses a lot of
internal functions in all the implementations I have that support it.)
#\Erik
--
Bastard Sex Therapist from Hell: "Read the F*cking Manual!"
Your function doesn't do what you described above. You said you wanted to
find out the symbol's status with respect to a given package, but the above
function only returns its status w/r/t its home package. The function you
asked for would be more like:
(defun symbol-information (symbol &optional (package (symbol-package symbol)))
(nth-value 1 (find-symbol (symbol-name symbol) package)))
>since the Lisp printer must determine whether a symbol is accessible in the
>default package or internal or external in some package all the time, I'd
>thought I could have access to that information, too. suggestions?
The printer also has to call SYMBOL-NAME so it will know what to print, so
it's not so much of a waste for it to pass this to FIND-SYMBOL. I expect
the printer's code looks something like this (ignoring uninterned and
keyword symbols, for simplicity):
(defun print-symbol (symbol)
(let ((name (symbol-name symbol)))
(if (eq symbol (find-symbol name *package*))
(write-with-escapes name)
(let* ((package (symbol-package symbol))
(status (nth-value 1 (find-symbol name package))))
(write-with-escapes (package-name package))
(write-char #\:)
(unless (eq status :external)
(write-char #\:))
(write-with-escapes name)))))
--
Barry Margolin
BBN Corporation, Cambridge, MA
bar...@bbnplanet.com
(BBN customers, call (800) 632-7638 option 1 for support)