为什么 (等于(复制<某些结构类型> <结构类型对象>) <相同的结构类型对象>) 为 nil?



结构类型的元素是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类型定义的对象;等于";运算符不起作用,而另一个运算符";等于";,用于比较结构化数据。

最新更新