Do symbols need to be EQ?
Sam Steingold
sds at gnu.org
Mon Jul 6 22:28:25 UTC 2015
> * Edi Weitz <rqv at jrvgm.qr> [2015-07-03 11:31:55 +0200]:
>
> On Fri, Jul 3, 2015 at 11:02 AM, Alessio Stalla <alessiostalla at gmail.com> wrote:
>> Package = map from symbol name to symbol object.
>> INTERN ~= (or (gethash ...) (setf (gethash ...)))
>> UNINTERN ~= remhash
>
> I would consider that to be an implementation detail. As Anton said,
> this is mostly about saving space and time. It would not be
> inconceivable to have an "implementation" that worked like so:
>
> (defparameter *my-package* (make-hash-table :test 'equal))
>
> (defun my-intern (symbol-name &optional (package *my-package*))
> (or (gethash symbol-name package)
> (setf (gethash symbol-name package)
> (parse-integer symbol-name)))) ;; <-- imagine some
> clever hashing technique
>
> (defun my-unintern (symbol-name &optional (package *my-package*))
> (remhash symbol-name package))
>
> CL-USER > (defparameter *s* (my-intern "42"))
> *S*
> CL-USER > (my-unintern "42")
> T
> CL-USER > (eql (my-intern "42") *s*)
> T
>
> (Meaning you'd somehow enforce the same "pointer" once the symbol is
> "re-created".)
this behavior is non-compliant.
http://www.lispworks.com/documentation/HyperSpec/Body/f_intern.htm
>>> If no such symbol is accessible in package, a new symbol with the
>>> given name is created
i.e., after unintern, there is no symbol with this name, thus intern
creates a _NEW_ symbol which cannot be EQ to any other existing object
(this is the definition of the word "new" or "fresh").
--
Sam Steingold (http://sds.podval.org/) on darwin Ns 10.3.1348
http://www.childpsy.net/ http://truepeace.org http://mideasttruth.com
http://www.dhimmitude.org http://ffii.org http://iris.org.il
Warning! Dates in calendar are closer than they appear!
More information about the pro
mailing list