[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Make-Hash-Table
Date: Tue, 22 Jan 1985 22:56 EST
From: Skef Wholey <Wholey@CMU-CS-C.ARPA>
I propose the following clarification to the specification of how the
:rehash-threshold and :rehash-size options interact:
There are four cases:
1. :rehash-threshold is an integer and :rehash-size is an integer.
In this case, when a hash table is grown (by adding rehash-size to
the current hash table size), the rehash-threshold is scaled up by
multiplying it by the ceiling of the ratio of the new size to the
original size.
2. :rehash-threshold is an integer and :rehash-size is a float.
In this case, when a hash table is grown (by multiplying the current
hash table size by the rehash-size), the rehash-threshold is scaled
up by multiply it, too, by the rehash-size.
Don't forget to convert the result of that multiplication from a float back
to an integer!
3. :rehash-threshold is a float and :rehash-size is an integer.
In this case, when a hash table is grown (by adding rehash-size to
the current hash table size), we just leave the rehash-threshold
alone.
4. :rehash-threshold is a float and :rehash-size is a float.
To grow, just multiply the current hash table size by the rehash-size
and again leave the rehash-threshold alone.
If :rehash-threshold is a fixnum, then the hash table is grown when the number
of entries in the table exceeds the :rehash-threshold. If :rehash-threshold is
a float, then the hash table is grown when the ratio of the number of entries
in the to the size of the table exceeds the :rehash-threshold.
I think you can eliminate cases 1 and 2 by the trick of doing
(when (integerp rehash-threshold)
(setq rehash-threshold (/ (float rehash-threshold) size)))
at initialization. Now it scales automatically.
This seems to be the "obvious" interpretation of the description on pages
283-284, and this is how I intended to implement hash tables for Spice Lisp.
I believe this interpretation.
Bug-CLCP: We don't seem to implement any case other than #4. This is mentioned
in the release notes.