common-lisp - 如何重新创建由`make-symbol`创建的符号
问题描述
我的程序创建了虚拟数据。这些虚拟数据的一部分是符号形式的键:(以罗马数字作为键的固定数字值)。该程序将这些虚拟键值对存储在我正在开发的数据结构中。(lambda (i) (
make-symbol
(format nil
"~@r"
i)))
我尝试使用 REPL 中的这些符号来测试通过它们的键检索值。然而:
(equal (make-symbol "IX") (make-symbol "IX"))
零
(equal (make-symbol "IX") 'IX))
零
有没有办法输入以前make-symbol
在 REPL 中创建的符号,以便两者都是equal
?
解决方案
正如@coredump 建议的那样,使用实习生将这些符号添加到某个包中,如下所示:
CL-USER> (defpackage :my-symbols)
#<Package "MY-SYMBOLS">
CL-USER> (intern "IX" :my-symbols)
MY-SYMBOLS::IX
NIL
CL-USER> (intern "IX" :my-symbols)
MY-SYMBOLS::IX
:INTERNAL
CL-USER> (eql (intern "IX" :my-symbols)
(intern "IX" :my-symbols))
T
CL-USER>
推荐阅读
- html - 选择输入大于引导程序 4 中的输入字段
- botframework - 对 botframework 的多个 Slack 通道支持
- python-3.x - 如果 glmnet 确实需要浮点数,为什么当我提供浮点数时 glmnet.py 会在 cvglmnet 上抛出 TypeError?
- sql - 变量字符串:需要获取位于分隔符之间的子字符串
- r - 使用 ggbarplot 的 x 数据以外的其他列作为 x 标签
- c# - 如何使用 MVVM 在 WPF 中基于绑定到 X 和 Y 位置属性从 Canvas 上的 2 个列表中分发模板项目
- scala - 使用类型化 UDAF 推断为二进制的列类型
- java - 在 Web 服务中执行 SOAP 身份验证的最佳方式是什么?
- asp.net-mvc - 如何将带有连字符和冒号的属性添加到剃须刀中的 Html Helper 方法?(vuejs 语法)
- c# - 带有 :this 元素的构造?