您是否可以在Lisp中使用哈希表或字典?我的意思是数据结构,即一组成对的(键、值)集合,其中可以使用键访问值。
您是否可以在Lisp中使用哈希表或字典?我的意思是数据结构,即一组成对的(键、值)集合,其中可以使用键访问值。
Common Lisp有至少四种不同的方法来进行键值存储:
对于简单的使用,关联列表或属性列表是可以的。但是当元素数量较大时,它们往往会变得'缓慢'。哈希表速度更快,但也有其自身的权衡。CLOS对象像许多其他对象系统一样使用。键是在CLOS类中定义的槽名。虽然可以编程变体,在访问时可以添加和删除插槽。
(setq a (make-hash-table))
(setf (gethash 'color a) 'brown)
(setf (gethash 'name a) 'fred)
(gethash 'color a) => brown
(gethash 'name a) => fred
(gethash 'pointy a) => nil
属性列表适用于非常小的演示目的,但对于任何实际需求,它们的性能都很差,因此请使用哈希表。
hash-table
的类型提供。
使用这些表格 需要使用 make-hash-table
函数创建一个表格,使用 gethash
读取数值,在使用 place 以及 setf
协作将它们设置,并使用 remhash
删除条目。
sxhash
函数。Clojure内置了一个map类型:
user=> (def m {:foo "bar" :baz "bla"})
#'user/m
user=> (m :foo)
"bar"