1

在 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 而不是相反,这不是很奇怪吗?我在这里想念什么?

4

2 回答 2

4

这是按照规范。一个LIST要么是一个CONS,要么是一个符号 NIL (它是类型NULL的唯一对象),这意味着这两种类型都是 LIST 的特化,因此它们的等效系统类继承自 LIST。

于 2011-05-26T11:31:34.973 回答
-1

并不是所有的 conses 都是列表(因为最终的 cdr 可能不是 nil),也不是所有的列表都是 conses(nil 不是列表,如前所述)。所以从技术上讲,两者都不是另一个类的正确子类。我认为规范是这样写的,因为有人看到了实际用途,但我同意它令人困惑并且可能被误导。

于 2011-05-28T14:46:47.080 回答