On Fri, Jul 3, 2015 at 3:09 AM, Edi Weitz edi@weitz.de wrote:
Just out of curiosity and without any relevance in practise:
Is there one place in the standard where it is explicitly said that two symbols which are the "same" symbol must be "identical"? I know that there are a couple of examples where this is implied, but formally the examples aren't part of the standard, right?
The EQ dictionary entry for example shows this example:
(eq 'a 'a) => true
and then it continues with this note (emphasis mine): "Symbols that print the same USUALLY are EQ to each other because of the use of the INTERN function."
And the entry for INTERN is actually the closest I could find in terms of clarification because it says that if a symbol of a specified name is already accessible, _IT_ is returned -- which sounds like object identity to me.
But how does this fit into the picture?
CL-USER 1 > (defparameter *s* 'foo) *S* CL-USER 2 > (unintern 'foo) T CL-USER 3 > (defparameter *s2* 'foo) *S2* CL-USER 4 > (eq *s* *s2*) NIL
*S* has lost its home package and is thus not EQ to *S2*, sure, but how do we explain this in terms of object identity? Has the UNINTERN operation changed the identity of *S* which once was the one and only CL-USER::FOO but can't be anymore because this role is now occupied by *S2*?
Did I miss some clarifying words in the standard? Did I just manage to confuse myself?
I think you manged to confuse yourself. unintern of course did not change the identity of *s* (by which we are meaning the symbol bound to *S*) -- identity is identity is identity. Unintern did, however, change the package of *s*, so (as one side-effect) a new symbol of the same name in the same package is a new object (identical to nothing at birth).
Perhaps the problem is confusing the levels of abstraction offered by (a) EQ and (b) object identity. The latter is a very simple idea. EQ, as you adroitly demonstrated, worries about all sorts of things, including a symbol's package.
my2 anyway.
-kt
Thanks, Edi.
PS: The UNINTERN entry warns about side effects which could harm consistency, so maybe this is what they meant?