[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: intern
Date: Tue, 11 Feb 86 12:33:45 pst
From: hpfclp!diamant@hplabs.ARPA
To: hplabs!common-lisp@su-ai.ARPA
Subject: Re: intern
From: hplabs!NGALL@G.BBN.COM
My question is: does INTERN (the function) always "intern" (the
verb). Also, are there any other functions which "intern," such
as import, for instance. Specificially, should INTERN set the
home package of an uninterned symbol?
I asked this question a while back (too bad the archives are so hard
to access!). My impression was that there was a consensus that IMPORT
is the function that is responsible for "updating" the package-slot of
an uninterned symbol (since IMPORT is the only function that can put a
SYMBOL in a package).
Guy Steele sent out a list of proposed "clarifications" a few months
ago (also in the archives). The clarification for IMPORT was: "If
symbol has no owner, its package cell is updated."
-- Nick
...
Thanks for the clarification on IMPORT. I did have a copy of the
clarifications, but hadn't looked them over carefully enough. I am
certainly satisfied by the new definition of IMPORT, but something
still bothers me about INTERN. As the reason for having import be
the only function responsible for updating the package slot, you claim that
IMPORT is the only function that can put a SYMBOL in a package. By this,
do you mean an already existing symbol, or any symbol? Obviously, if
An already existing symbol.
I type (intern "FOO"), I will put the symbol FOO in the current package (if
it wasn't already available). If you mean an already existing symbol,
isn't that equivalent to the question I already asked?
I'm not sure wwhich question you are refering to.
I'm not trying
to be picky -- I just don't understand the motivation for restricting
INTERN from setting the home package. On page 172, CLtL says (for the
Neither do I. (And I don't think you're being picky, keep the
comments coming!)
function INTERN): "If the symbol previously was unowned, then the package
it is being interned in becomes its owner (home package); but if the symbol
was previously owned by another package, the other package continues to
own the symbol." To me, that seems to strongly suggest that INTERN would
have to set the home package on a symbol which doesn't CURRENTLY have a
home package. As I said before, this creates a problem for the definition
Unfortunately, most implementors seem to have ignored this passage.
of FIND-SYMBOL since it is defined to be identical to INTERN except that
it can't create a new symbol. Consider:
(let ((x (intern "FOO")))
(import x (find-package "BAR"))
(unintern x)
(find-symbol "FOO" (find-package "BAR")))
;; the defn. in CLtL would imply that x would now be homed in BAR.
In my first reply, I forgot about good old UNINTERN, which can make an
interned symbol homeless (as in your example). So I was making the
point that if one "fixed" import, one could never get homeless
interned symbols. Wrong.
I think the attitude at the time was that IMPORTing a homeless symbol
(e.g., a GENSYMed symbol) was the only "straightforward" way that an
interned symbol could be left homeless, i.e., it is the only way
"novice" CL user's could "easily" cause such an inconsistency. The
case of UNINTERN a symbol from its home package when it is also
present in other packages, was considered a pathological case (it is
even mentioned in the description of UNINTERN), and not worth the
trouble of having INTERN deal with. So the passage on 172 was to be
removed (Guy, this is not in your list of clarifications.) and the
wording for IMPORT changed as I mentioned previously.
As far as FIND-SYMBOL is concerned, I think the "identical behavior"
wording was used because the passage on pg. 172 as overlooked. To me,
the idea behind find-symbol is that it is identical to INTERN except
that it does not cause ANY side-effects (incl. fixing the package
slot).
What I would like to see is the following:
1. Leave the stipulation on page 172 that INTERN fix-up the package
slot of an interned symbol.
2. Refer to pg. 172 in the def. of INTERN.
3. Make IMPORT also fix up the package slot.
4. In UNITERN, after warning about homeless interned symbols, cf.
IMPORT for fixing things up.
5. Make clear that FIND-SYMBOL has NO SIDE EFFECTS. And point out
that it is the only way of mapping a name to a homeless interned
symbol.
How 'bout it?!