我最近一直在玩 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*))
它给了我NIL
,当我期望的时候123
。如果我用 a 替换(list 1 2)
它cons
仍然不起作用,但是当我使用普通整数时,它工作正常。
我正在使用 GCL 2.6.12