lisp - 如何从 Common Lisp 中的哈希表返回值?

标签 lisp common-lisp hashtable

我无法让我的哈希表可靠地返回值,我想知道是否有人可以提供建议?

这就是我正在做的事情:

  1. 制作表格:

(setq table (make-hash-table))

  • 定义一个变量来命名表中的元素,初始名称是“bob”,但在我的程序中,它将保存用户生成的值,该值会不时更改:
  • (defvar name-of-element "bob")

  • 向表中添加一行,以name-of-element的内容命名。 :
  • (setf (gethash name-of-element table) "bob's element")

  • 当我使用键 name-of-element 从表中检索元素时:
  • (gethash name-of-element table)

    我得到:

    "bob's element"
    T
    
  • 但是当我尝试使用 "bob" 检索时:
  • (gethash "bob" table)

    我得到否定/没有结果:

    N
    N
    

    想法?

    最佳答案

    make-hash-table:test 选项的默认值为 eql。当您创建一个新字符串 "bob" 时,它与 name-of-element 的值不相等,例如

    (eql "bob" name-of-element) => NIL
    

    使用 :test 'equal 获取认为相似字符串相等的哈希表。

    (defvar *table* (make-hash-table :test 'equal))
    

    关于lisp - 如何从 Common Lisp 中的哈希表返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73888030/

    相关文章:

    lisp - 如何在 Windows 中安装 gtk-cffi?

    web - 如何创建 Restas 全局装饰器

    ubuntu - 软件包 GCL 和 CLISP 之间有什么区别?

    powershell - 将哈希表值属性导出到 CSV 文件

    c++ - 链接列表数组(使用散列)

    lisp - SBCL - 常见的 Lisp 错误

    Lisp 力量之和

    Java - 从哈希表检索值时出现问题

    LISP 在局部函数中更改全局变量值

    Clojure:确定函数是否存在