lisp - CONS 对象可以用作哈希表的键吗?

标签 lisp common-lisp gnu-common-lisp

我最近一直在玩 LISP,我想尝试通过缓存它的输出来优化一个非常低效的递归函数,这样它只运行每个参数组合一次。我想将结果保存到哈希表中,使用 (LIST a b)(CONS a b) 作为键。我的问题是,这可能吗?我读过的文档会让我相信它是,因为我读过的文档将 key 定义为“对象”,并将“对象”定义为使用 cons< 构造的东西。所以我试了一下。

(defparameter *table* (make-hash-table))
(setf (gethash (list 1 2) *table*) 123)
(format t "~S~%" (gethash (list 1 2) *table*))

当我期望 123 时,它给了我 NIL。如果我用 cons 替换 (list 1 2) 它仍然不起作用,但是当我使用普通整数时,它工作正常。

我正在使用 GCL 2.6.12

最佳答案

(make-hash-table :test #'equal)

关于lisp - CONS 对象可以用作哈希表的键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28473621/

相关文章:

emacs - 我如何计算 Emacs 中打开的缓冲区/文件的数量?

lisp - 为什么 Lisp 社区如此分散?

windows - 如何使用 emacs lisp 调用 Windows API 函数?

recursion - 用尾递归解决 "n-rooks"

lisp - 收集 `time`宏产生的时空结果?

emacs - 无法使用 make-symbol 生成的名称调用宏中定义的函数

java - 以 Clojure 格式(java.util.Formatter)、cl 格式(Common Lisp 格式)以编程方式控制填充?

clojure - 相当于 Common Lisp 中 Clojure 的 “assoc-in” 和 “get-in”

common-lisp - Quicklisp:如何从 Quicklisp 取消注册本地系统

lisp - 确定父类(super class)型路径