我最近一直在玩 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/