sbcl中的奇怪类优先级列表

问题描述

| 在sbcl中
*(sb-mop:class-precedence-list (find-class \'cons))
==>(#<BUILT-IN-CLASS CONS> #<BUILT-IN-CLASS LIST> #<BUILT-IN-CLASS SEQUENCE>
 #<BUILT-IN-CLASS T>)
cons是从list继承而来的,不是相反的吗?我在这里想念什么?     

解决方法

这是根据规范。 LIST可以是CONS或符号NIL(这是NULL类型的唯一对象),这意味着这两种类型都是LIST的特化,因此它们的等效系统类继承自LIST。     ,并非所有conses都是列表(因为最终的cdr可能不是nil),也不是所有列表都是conses(如前所述,nil不是列表)。因此,从技术上讲,这两个类都不是另一个的子类。我认为规范是用这种方式编写的,因为有人看到了实际的用法,但是我同意它会造成混淆,并且可能会被误导。