[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
EQUAL, and hash tables, and value/object distinctions
[have been out of town for some time, and under other time constraints,
so apologies in advance for replying to "old mail"]
re: First, if EQUAL is going to descend structures and arrays to test
for isomorphism, it should compare hash tables for equality
according to their contents. That is, it should verify
that two possibly-equal hash tables have the same set of
keys, and that for each key the two stored values are EQUAL.
Key equality testing must be done using each table's
key comparison function.
That's a lot of very strong words for what must be considered an
opinion on how EQUAL could be extended to the case of hash-tables.
The difficulty is that EQUAL has, until now, been a very low-level
simple-minded component-wise equivalence test. What you are proposing
is something that looks much more grandiose than even EQUALP. While
I might see some partial utility in these relations that equated
more things (e.g., 3/2 and 1.5 are EQUALP), and those that refined
EQUAL (e.g., "graph-isomorphism" equates fewer things than EQUAL), I
don't see why EQUAL should bear the burden of being anything more than
a "simple-minded component-wise equivalence test."
re: Date: Wed, 29 Jun 88 18:57:09 PDT
From: Jon L White <edsel!jonl@labrea.stanford.edu>
. . . At one time, there was a suggestion that hash tables admit
a user-supplied equivalence predicate; but it never got very far for
just this reason, that the equivalence predicate must be *** paired up**
with an appropriate "numericalizer" function, and many implementors felt
that users wouldn't understand these issues and wouldn't be able to
construct up their own versions of sxhash to go with their alleged
equivalence predicates.
Yuck. Who are these brilliant Implementors, that we may all worship
at their feet? For they are the curators of such profound knowledge as
(EQUALITY-PREDICATE X Y) ==> (= (HASH-FN X) (HASH-FN Y))
If we mere Users cannot be trusted with such wisdom, how are we to
navigate the Streams of Extensibility, or handle the Objects of
Genericity? Oh great Implementors, save us, we pray, from overmuch
functionality.
Seriously, I hear an alarming amount of condescension in the above
reasoning.
The above logical implication is ALL THAT IS NEEDED to construct an
appropriate hash function. It is the sole and fundamental insight which
makes hash tables work; I have relied on it for years, building many a
hash table in various extensible frameworks. What's the problem of
requiring a hash-table builder from promising that his hash and equality
functions bear the simple relation to each other? And if he can't
There is no :HASH-FN argument to make-hash-table in CL; and I presume you
mean the :TEST argument when you say :EQUALITY-PREDICATE? The last time
on this mailing list that I suggested having user-suppled equivalence
predicates for hash-tables, there was:
(1) a lot of argumentation over what to call the replacement for SXHASH
[a ":test" argument isn't enough, if you give an equivalence relation
for which the system-supplied SXHASH function isn't "good enough" in
the sense I spoke about before]
(2) comments from Symbolics folks that they had discussed these ideas
internally, and rejected them because of the potential for confusion
over the SXHASH correlation issue.
You might try asking Dave Moon what the issues were, if you are really
interested. It may be that the close link between methods on EQUAL and
methods on SXHASH is one reason that CLOS doesn't say much about EQUAL.
-- JonL --