Lisp中的哈希表类型

And*_* S. 4 lisp types hashtable common-lisp

我发现,在CL哈希表中有一个类型HASH-TABLE(令人惊讶).但是,矢量可以只是矢量,但也可以进一步指定为(矢量编号12).

散列表似乎很自然地有一个列表类型,比如,(hash-table number cons)或者其他东西,但它似乎不起作用,我找不到任何对它的引用.有什么建议?

ceb*_*ola 5

TL; DR类型向量可以针对内存使用进行优化,但是类型化的哈希表大多没有意义.


免责声明:这主要是基于直觉,甚至不是权威的答案.

类型向量很有用,因为它们是在内存中连续存储数据的最实用的方法 - 如果你知道所有元素的类型(并且由于它,也是大小),分配足够的内存来存储所有元素是微不足道的.他们在一起.您可能已经知道,CL的位向量就是:最佳存储,可单独访问的位的抽象.如果没有类型信息,则必须存储指向散乱的实际数据的指针向量.

如果您熟悉如何实现简单的哈希表,那么您就知道类型信息在这里不太有用.将实际数据存储在表中(通常是指针的向量)有点尴尬,或者因为处理哈希键冲突变得更难(否则你最终会得到一个链表),或者因为调整大小该表将涉及将所有数据复制到新表,而不是仅仅更改几个指针.当然,调整向量大小也需要复制所有内容,但它只需一步完成,而对于散列表,每个元素必须执行一次,因为它们在表中的位置会发生变化.这几乎没有任何好处.

此外,类型化的哈希表听起来不是很好.