比较CLOS对象

时间:2016-07-18 21:00:37

标签: common-lisp clos

我想知道为什么Common Lisp中没有内置的相等运算符来比较CLOS对象(标准类)。例如," equalp"可以应用于数组,结构,散列表,但不能应用于对象。

我假设一个新的测试,它下降一个对象并检查插槽值是否等于是否可由程序员编写,但我想知道是否有理由不将其作为标准的一部分,因为我想象它&#39一个相当普遍的事情要做?例如,似乎测试函数用于" make-hash-table"必须是内置的*之一,因此,我真的不知道如何在哈希表中使用对象作为键或值。

*我注意到有一个相关的问题(Using Common Lisp CLOS objects as keys in a hashtable?),但它并没有真正回答我的问题。

谢谢和欢呼!

中号

1 个答案:

答案 0 :(得分:2)

我无法提供明确的答案,但我怀疑部分原因是historical: 在完成equalp的规范后,CLOS被添加到ANSI CL

请注意,equalp可以按照您的预期在structure-object上运行。 另请注意,结构具有readable print syntax 虽然CLOS objects缺乏它。

然而,这可能不像人们最初想的那么大。

CLOS对象可以比较重; 鉴于slot accessorsgeneric functions, 找出对象平等可以快速转换为比较函数。