首页 > 解决方案 > 如何重新创建由`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

标签: common-lisp

解决方案


正如@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>

推荐阅读