在普通 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
我想生成可用于多个散列 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