Do symbols need to be EQ?

Pascal Costanza pc at p-cos.net
Sat Jul 4 08:39:49 UTC 2015


Most languages don’t specify object identity in sufficient detail, so I’m not surprised Common Lisp doesn’t do this either.

Pascal

> On 3 Jul 2015, at 09:09, Edi Weitz <edi at 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?
> 
> Thanks,
> Edi.
> 
> PS: The UNINTERN entry warns about side effects which could harm
> consistency, so maybe this is what they meant?
> 

--
Pascal Costanza





More information about the pro mailing list