Data structures 你能用lisp语言写哈希表吗?

Data structures 你能用lisp语言写哈希表吗?,data-structures,hash,dictionary,lisp,Data Structures,Hash,Dictionary,Lisp,你能用Lisp语言编写哈希表或dict吗?我指的是数据结构,它是一组对(键、值)的集合,其中的值可以使用键进行连接。在Lisp中,它通常被称为属性列表。当然。以下是在Scheme中定义标准哈希表库的SRFI: 当然-Common Lisp有 属性列表适用于非常小的示例演示用途,但对于任何实际需要,它们的性能都非常糟糕,因此请使用哈希表。如果您指的是Common Lisp,则由名为的类型提供 包括使用函数创建一个,使用读取值,使用gethash作为协调项进行设置,以及使用删除条目 从键值到散列代码

你能用Lisp语言编写哈希表或dict吗?我指的是数据结构,它是一组对(键、值)的集合,其中的值可以使用键进行连接。

在Lisp中,它通常被称为属性列表。

当然。以下是在Scheme中定义标准哈希表库的SRFI:


当然-Common Lisp有


属性列表适用于非常小的示例演示用途,但对于任何实际需要,它们的性能都非常糟糕,因此请使用哈希表。

如果您指的是Common Lisp,则由名为的类型提供

包括使用函数创建一个,使用读取值,使用
gethash
作为协调项进行设置,以及使用删除条目


从键值到散列代码的映射在函数的散列表之外可用。

Clojure具有内置映射类型:

user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"

请参见Common Lisp至少有四种不同的方法(键值存储):

  • 属性列表(:foo 1:bar 2)
  • 助理名单(:foo.1)(:bar.2))
  • 哈希表
  • CLOS对象(插槽值foo’bar)以获取,以及(setf(插槽值foo’bar)以设置。插槽名称可以存储在变量中:(let((name'bar))(插槽值foo name))
对于简单的用法,可以使用关联列表或属性列表。随着元素数量的增加,它们往往变得“慢”。哈希表“更快”,但有自己的权衡。CLOS对象与许多其他对象系统一样使用。键是CLOS类中定义的插槽名称。虽然可以在Access中添加和删除插槽的程序。

< P>有内置的,使用系统散列函数(通常是SXHASH),在那里你可以有两个不同的相等检查器(EQ、EQL、等或均等,这取决于你认为是同一个)。
如果内置的哈希表不够好,还有一个库。它将接受任意一对“哈希生成器”/“密钥比较器”,并为您构建一个哈希表。然而,它依赖于有一个好的哈希函数才能很好地工作,这并不一定是一件小事。

不,属性列表是不同的。请参阅CLHS词汇表:是和否——属性列表不是哈希表,但它确实提供了一个类似于字典的接口(他的问题指定了“……数据结构,它是一个成对(键、值)的集合,其中的值可以使用键来加入。”属性列表当然提供了这一点,尽管没有哈希(或任何接近相同性能的产品…)
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"