我想将Common Lisp CLOS对象用作哈希表中的键。我认为这很简单:
(defclass my-class () ((a :accessor a :initarg a)))
(defun my-class= (my-instance-1 my-instance-2)
(equal (a my-instance-1) (a my-instance-2)))
(defparameter my-hash-table (make-hash-table :test #'my-class=))
检查Common Lisp Hyperspec,我似乎只能使用eq,eql,equal或equalp来测试相等性。
我有什么方法可以做到这一点?或者这只是一个真正的stoopid事情,这就是为什么标准不允许它?
答案 0 :(得分:9)
Common Lisp标准没有提供任何提供额外测试功能的机制(beyound标准功能)。您有两个选择:
sb-ext:define-hash-table-test
功能(documentation)ext:define-hash-table-test
(documentation):test
参数的非标准值,并且:hash-function
参数Allegro,Lispworks)。