结构类型的元素是s-表达式。
(defstruct state
homeS
homeH
homeD
homeC
free
stacks)
我试图将这些对象用作哈希表的键。在我转换为结构并使用更深层次的S表达式之前,所有操作都很好。当我改为defstruct时,哈希表从未成功找到重复的键。
该哈希表是用(make-hash-table :test #'equal)
创建的,所以我查看了equal的行为。
我期望(equal (copy-state state1) state1)
返回t,但它返回了nil。
我在Common Lisp Hyper Specification中没有找到这个。我认为答案是编写我自己的测试和哈希函数,并将它们用于制作哈希表。
这必须被定义为常见的lisp行为——它在CLISP和SBCL中的工作方式相同。
根据公共Lisp超规范,自然操作"等于";,不适用于像defstruct和defarray对象这样的结构化数据。
在这种情况下,对于由defstruct类型定义的对象;等于";运算符不起作用,而另一个运算符";等于";,用于比较结构化数据。