在 Lisp 中输入 Hash-table

Hash-table type in Lisp

我发现,在 CL hash table 中有一个 HASH-TABLE 类型(令人惊讶)。然而,向量可以只是 VECTOR,但也可以进一步指定为(向量编号 12),例如。

hash-table 有一个列表类型似乎很自然,比如 (hash-table number cons) 之类的,但它似乎不起作用,我找不到任何参考资料。有什么建议吗?

TL;DR 类型化向量可能针对内存使用进行了优化,但类型化的哈希-tables 大多毫无意义。


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

类型化向量很有用,因为它们是在内存中连续存储数据的最实用方法——如果您知道所有元素的类型(并且因此,还有大小),分配足够的元素就很简单了将所有这些存储在一起的内存。您可能已经知道,CL 的位向量就是这样:对最佳存储的、可单独访问的位的抽象。如果没有类型信息,您必须存储指向分散的实际数据片段的指针向量。

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

此外,键入的散列 -table 听起来不太 Lispy。