Lisp中的哈希表类型

5
我发现,在CL中哈希表有一个类型HASH-TABLE(令人惊讶)。然而,向量可以只是VECTOR,但也可以进一步指定为(vector number 12),例如。
哈希表似乎应该有一个列表类型,比如(hash-table number cons)之类的,但它似乎不起作用,我找不到任何参考资料。有什么建议吗?

对,这在标准的 Common Lisp 中不存在。可能会有用。 - Rainer Joswig
1个回答

7
TL;DR:类型向量可以优化内存使用,但类型哈希表基本上是无意义的。
免责声明:这主要是基于直觉的,远非权威答案。
类型向量很有用,因为它们是在内存中连续存储数据的最实用方式——如果您知道所有元素的类型(由此也知道大小),则可以轻松地分配足够的内存来存储它们。正如您可能已经知道的那样,CL的位向量就是这样的:为了最优地存储、单独访问比特而进行的抽象表示。如果没有类型信息,则必须将指向散布的实际数据片段的指针向量存储为一个向量。
如果您熟悉简单哈希表的实现方式,那么您会知道在这里类型信息不太有用。在表格中存储实际数据有点尴尬(通常是指针的向量),或者因为处理哈希键冲突变得更加困难(否则您最终仍然会得到一个链接列表),或者因为调整大小要涉及将所有数据复制到新表中,而不仅仅是更改一些指针。当然,重新调整向量的大小也需要复制所有内容,但是它是一步完成的,而对于哈希表,必须为每个元素执行一次此操作,因为它们在表格中的位置将已更改。基本上没有好处。
另外,类型哈希表听起来并不像是Lisp风格的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接