在 Common Lisp 中为哈希表自动生成密钥



我想生成可以在多个哈希表中使用的顺序键。我会称它们为"id1"、"id2"等。如果 ht 是我的哈希表,那么我想用字符串制作符号作为键。要向哈希表添加一个条目,我想这样做:

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

然后再次访问它

(gethash 'id1 ht)

我不认为make-symbol给了我想要的东西,而且键"id1"无法识别。

制作此密钥的最佳方法是什么?

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

在您的情况下,我们有:

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

请务必考虑以下事项:

  • 实习包中的符号
  • 在正确的包装中实习符号
  • 确保符号具有正确的名称和正确的大小写
  • 使用您打算使用的大小写符号,可能需要转义符号以保留大小写

例子:

大写符号和小写符号名称 -> 不是 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

make-symbol创建未绑定的符号。这意味着您每次都会有一个独特的符号。要获取暂留符号,请改用intern

最新更新