【问题标题】:Hash-table type in LispLisp 中的哈希表类型
【发布时间】:2018-10-05 22:55:35
【问题描述】:

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

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

【问题讨论】:

  • 对,这在标准 Common Lisp 中不存在。可能有用。

标签: types lisp common-lisp hashtable


【解决方案1】:

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


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

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

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

此外,类型化的哈希表听起来不太 Lispy。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多