使用字符串对象为Common Lisp中的哈希键(Using string object as a

2019-07-17 16:51发布

我试图创建一个“字典”型 - 用一个字符串作为一个关键,即哈希表。 这是可能的或明智的Lisp的?

我注意到,这是按预期工作:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46>
> (setf (gethash 1 table) "one")
"one"
> (gethash 1 table)
"one"

但是,下列情况不:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> table
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> (setf (gethash "one" table) 1)
1
> (gethash "one" table)
NIL
NIL

Answer 1:

你需要使用“平等,而不是当” EQL哈希表。 “EQL不计算两个字符串相同的内容,以” T,而“平等呢。

这里是你如何做到这一点:

(make-hash-table :test 'equal)

正如skypher注意你也可以使用“equalp代替,如果你想不区分大小写散列。



文章来源: Using string object as a hash key in Common Lisp