我想知道为什么Common Lisp中没有内置的相等运算符来比较CLOS对象(标准类)。例如," equalp"可以应用于数组,结构,散列表,但不能应用于对象。
我假设一个新的测试,它下降一个对象并检查插槽值是否等于是否可由程序员编写,但我想知道是否有理由不将其作为标准的一部分,因为我想象它&#39一个相当普遍的事情要做?例如,似乎测试函数用于" make-hash-table"必须是内置的*之一,因此,我真的不知道如何在哈希表中使用对象作为键或值。
*我注意到有一个相关的问题(Using Common Lisp CLOS objects as keys in a hashtable?),但它并没有真正回答我的问题。
谢谢和欢呼!
中号
答案 0 :(得分:2)
我无法提供明确的答案,但我怀疑部分原因是historical:
在完成equalp
的规范后,CLOS被添加到ANSI CL 。
请注意,equalp
可以按照您的预期在structure-object
上运行。
另请注意,结构具有readable print syntax
虽然CLOS objects缺乏它。
然而,这可能不像人们最初想的那么大。
CLOS对象可以比较重; 鉴于slot accessors 是generic functions, 找出对象平等可以快速转换为比较函数。