[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Implementing :TEMPORARY hash tables at the Lisp level?
- To: "Steve Bacher (Batchman)" <SEB1525@draper.com>
- Subject: Implementing :TEMPORARY hash tables at the Lisp level?
- From: Barry Margolin <barmar@Think.COM>
- Date: Wed, 7 Sep 88 12:07 EDT
- Cc: firstname.lastname@example.org
- In-reply-to: <8809071217.AA06853@Think.COM>
Date: Wed, 7 Sep 88 07:52 EDT
From: "Steve Bacher (Batchman)" <SEB1525@draper.com>
Just a question. If one were to implement :TEMPORARY hash tables as
described - i.e. testing to see if the test were #'EQ or #'EQL - well,
just how does one code such a test in CL? Presumably you'd have code like
((#'eq #'eql) (make-em-collectible))
But... there is no way of testing equality of functions, lexical closures,
or what have you, in CL. So how can this possibly be implemented?
The internal implementation of a Common Lisp need not be written using
I suspect that in most CL implementations, #'<symbol> always returns the
same thing for symbols that do not have a lexical function binding, so
the above code would work. If not, then the hash table implementation
will have to use some implementation-dependent functions to extract the
function object from a closure and compare it against the function
bindings of EQ, EQL, and EQUAL.
In fact, current implementations of MAKE-HASH-TABLE must already have
something like this, since the hash function of a hash table must be
dependent on the :TEST argument.