在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从列表继承而不是相反的方式是不是很奇怪?我在这里缺少什么?
答案 0 :(得分:4)
这是specification。 LIST是CONS或符号NIL(它是NULL类型的唯一对象),这意味着这两种类型都是LIST的特化,因此它们等价系统类继承自LIST。
答案 1 :(得分:-1)
并非所有的conses都是列表(因为最终的cdr可能不是nil),并且并非所有列表都是conses(nil不是列表,如前所述)。从技术上讲,两者都不是正确的另一个类的子类。我认为规范的编写方式是因为有人看到了实际用途,但我同意这是令人困惑的,而且可能是错误的。