在常见的lisp中自动生成哈希表的密钥

时间:2017-11-09 08:14:14

标签: common-lisp hashtable symbols case-sensitive

我想生成可以在多个哈希表中使用的顺序键。我将它们称为'id1','id2'等。如果ht是我的哈希表,那么我想将字符串中的符号作为键。要在哈希表中添加一个条目,我希望如此:

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

然后使用

再次访问它
(gethash 'id1 ht)

我不认为 make-symbol 正在给我我想要的东西,并且密钥'id1'不被识别。

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

2 个答案:

答案 0 :(得分:4)

错误:符号应位于包中并需要正确的大小写

在你的情况下,我们有:

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

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

请务必考虑以下事项:

  • 实习包
  • 中的符号
  • 在正确的包中实习符号
  • 确保符号的名称正确,且大小写正确
  • 使用您打算使用的案例编写符号,可能需要转义符号以保留案例

<强>示例:

大写符号和小写符号名称 - &gt;不是eq

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

大写符号和大写符号名称 - &gt;是eq

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

转义&amp;小写符号和小写符号名称 - &gt;是eq

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

答案 1 :(得分:2)

make-symbol创建未加密的符号。这意味着每次都会有一个独特的符号。要获得实习符号,请改用intern