【问题标题】:What does it mean to 'hash cons'?“散列缺点”是什么意思?
【发布时间】:2010-10-19 03:30:53
【问题描述】:

什么时候使用它,为什么?

我的问题来自这句话:“hash cons with some classes and compare their instances with reference evidence”

【问题讨论】:

  • 您需要更加具体才能获得答案。是否涉及语言,您可以指向链接等...
  • 似乎是一个 lisp/scheme 的东西 - cons 是列表构造函数
  • 感谢尼尔的澄清,因为我迷路了
  • 对提问者 - 假设这是 alisp/scheme 问题 - 添加相关标签并最好修改您的标题

标签: performance algorithm optimization scala hash


【解决方案1】:

来自 Odersky、Spoon 和 Venners (2007),Scala 编程,Artima Press,p。 243:

您通过缓存您在弱集合中创建的所有实例来散列类的 cons 实例。然后,任何时候你想要一个新的类实例,你首先检查缓存。如果缓存已经有一个元素等于你要创建的元素,你可以重用现有的实例。由于这种安排,任何两个用 equals() 相等的实例也用引用相等。

【讨论】:

    【解决方案2】:

    把每个人的答案放在一起:

    ACL2(A Computational Logic for Applicative Common Lisp)是一个软件系统,由编程语言、一阶逻辑中的可扩展理论和机械定理证明器组成。

    -- Wiki ACL2

    在计算机编程中,cons(发音为 /ˈkɒnz/ 或 /ˈkɒns/)是 Lisp 编程语言的大多数方言中的基本功能。 cons 构造(因此得名)包含两个值或指向值的指针的内存对象。这些对象被称为 (cons) 单元格、conses 或 (cons) 对。在 Lisp 行话中,“to cons x on y”表示用 (cons x y) 构造一个新对象。结果对有一个左半部分,称为汽车(第一个元素)和一个右半部分(第二个元素),称为 cdr。

    -- Wiki Cons

    从逻辑上讲,hons 只是 cons 的另一个名称,即以下是 ACL2 定理:

    (等于 (hons x y) (cons x y))

    Hons 通常比 cons 运行得慢,因为在创建 hons 时,会尝试查看是否已经存在具有相同汽车和 cdr 的 hons。这涉及搜索和哈希表的使用。

    -- http://www.cs.utexas.edu/~moore/acl2/current/HONS.html

    鉴于您的问题:

    用一些类散列缺点并将它们的实例与引用相等性进行比较

    看来hash cons 是一个散列 LISP 构造函数的过程,以通过相等比较来确定对象是否已经存在。

    【讨论】:

      【解决方案3】:

      http://en.wikipedia.org/wiki/Hash_cons 现在重定向。

      它是cons,带有散列以允许eq(参考)比较而不是深度比较。这对内存更有效(因为相同的对象被存储为引用),如果比较是一种常见的操作,当然更快。

      http://www.cs.utexas.edu/~moore/acl2/current/HONS.html 描述了 Lisp 的实现。

      【讨论】:

        猜你喜欢
        • 2022-07-22
        • 1970-01-01
        • 2016-08-17
        • 2018-01-02
        • 2021-08-02
        • 2016-05-04
        • 2019-12-25
        • 2021-10-02
        • 1970-01-01
        相关资源
        最近更新 更多