Data structures 你能用lisp语言写哈希表吗?
你能用Lisp语言编写哈希表或dict吗?我指的是数据结构,它是一组对(键、值)的集合,其中的值可以使用键进行连接。在Lisp中,它通常被称为属性列表。当然。以下是在Scheme中定义标准哈希表库的SRFI:Data structures 你能用lisp语言写哈希表吗?,data-structures,hash,dictionary,lisp,Data Structures,Hash,Dictionary,Lisp,你能用Lisp语言编写哈希表或dict吗?我指的是数据结构,它是一组对(键、值)的集合,其中的值可以使用键进行连接。在Lisp中,它通常被称为属性列表。当然。以下是在Scheme中定义标准哈希表库的SRFI: 当然-Common Lisp有 属性列表适用于非常小的示例演示用途,但对于任何实际需要,它们的性能都非常糟糕,因此请使用哈希表。如果您指的是Common Lisp,则由名为的类型提供 包括使用函数创建一个,使用读取值,使用gethash作为协调项进行设置,以及使用删除条目 从键值到散列代码
当然-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))
如果内置的哈希表不够好,还有一个库。它将接受任意一对“哈希生成器”/“密钥比较器”,并为您构建一个哈希表。然而,它依赖于有一个好的哈希函数才能很好地工作,这并不一定是一件小事。不,属性列表是不同的。请参阅CLHS词汇表:是和否——属性列表不是哈希表,但它确实提供了一个类似于字典的接口(他的问题指定了“……数据结构,它是一个成对(键、值)的集合,其中的值可以使用键来加入。”属性列表当然提供了这一点,尽管没有哈希(或任何接近相同性能的产品…)
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"