在普通 lisp 中为散列 table 自动生成密钥

auto-generate key for hash table in common lisp

我想生成可用于多个散列 table 的顺序键。我会称它们为 'id1'、'id2' 等。如果 ht 是我的散列 table,那么我想将字符串中的符号作为键。要向散列 table 添加一个条目,我想这样:

(setf (gethash (make-symbol "id1") ht) 1)

然后使用

再次访问它
(gethash 'id1 ht)

我认为 make-symbol 没有给我想要的东西,而且密钥 'id1' 没有被识别。

制作这把钥匙的最佳方法是什么?

make-symbol 创建 uninterned 符号。这意味着您每次都会有一个独特的符号。要获得 interned 符号,请改用 intern

错误:符号应该在包中并且需要正确的大小写

对于您的情况,我们有:

CL-USER 24 > (symbol-name (make-symbol "id0"))
"id0"

CL-USER 25 > (symbol-package (make-symbol "id0"))
NIL

确保您考虑以下事项:

  • 在包中插入符号[=​​36=]
  • 在正确的包中插入符号[=​​36=]
  • 确保符号名称正确且大小写正确
  • 用你打算使用的大小写写符号,可能你需要转义符号以保留大小写

示例:

大写符号和小写符号名称 -> 不是 eq

CL-USER 26 > (eq 'id0 (intern "id0" "CL-USER"))
NIL

大写符号和大写符号名称 -> 是 eq

CL-USER 27 > (eq 'id0 (intern "ID0" "CL-USER"))
T

转义和小写符号和小写符号名称 -> 是 eq

CL-USER 28 > (eq '|id0| (intern "id0" "CL-USER"))
T