代码之家  ›  专栏  ›  技术社区  ›  Kasper van den Berg

如何重新创建由“make symbol”创建的符号`

  •  2
  • Kasper van den Berg  · 技术社区  · 7 年前

    我的程序创建虚拟数据。这些虚拟数据的一部分是符号形式的键: (lambda (i) ( make-symbol (format nil "~@r" i))) (fixnum值,其罗马数字作为符号作为键)。这个程序将这些伪键值对存储在我正在开发的数据结构中。

    我尝试使用REPL中的这些符号来测试通过键检索值。然而:

    (equal (make-symbol "IX") (make-symbol "IX"))
    

    (equal (make-symbol "IX") 'IX))
    

    有没有办法输入以前用创建的符号 制造符号 在REPL中 equal

    2 回复  |  直到 7 年前
        1
  •  7
  •   Alexander Artemenko    7 年前

    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>
    
        2
  •  4
  •   Rainer Joswig mmmmmm    7 年前

    可以使用 string= 按名称比较符号:

    CL-USER 29 > (string= (make-symbol "IX") (make-symbol "IX"))
    T
    
    CL-USER 30 > (string= (make-symbol "IX") (make-symbol "Ix"))
    NIL
    

    string-equal 是不区分大小写的变体。