common lisp-比较CLOS对象



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

我假设程序员可以编写一个新的测试,它可以降低对象并检查槽值是否相等,但我想知道这是否是标准的一部分,因为我认为这是一件相当常见的事情?例如,"生成哈希表"的测试函数似乎必须是内置函数之一*,因此,我真的不知道如何将对象用作哈希表中的键或值。

*我注意到有一个相关的问题(使用Common Lisp CLOS对象作为哈希表中的键?),但它并不能真正回答我的问题。

谢谢,干杯!

M

我无法给出确切的答案,但我怀疑部分原因是历史原因:在equalp的规范最终确定后,CLOS被添加到ANSI CL中。

请注意,equalpstructure-object上工作,正如您所期望的那样。还要注意,结构具有可读的打印语法而CLOS对象缺少它。

然而,这可能并不像人们最初想象的那样是一个大疏忽。

CLOS物体的重量可能相对较重;考虑到插槽访问者是通用函数,计算对象相等性可以很快转化为比较函数。

相关内容

  • 没有找到相关文章

最新更新