【问题标题】:Strange class precedence list in sbclsbcl中奇怪的类优先级列表
【发布时间】:2011-05-26 09:59:59
【问题描述】:

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

【问题讨论】:

    标签: lisp common-lisp sbcl clos mop


    【解决方案1】:

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

    【讨论】:

    • 我认为list的定义包括要求最后一个单元格的cdr为nil...
    • 这是非空正确列表的要求。 LIST 的链接中对此进行了说明。
    【解决方案2】:

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

    【讨论】:

    • 根据接受的正确答案,所有的conses都是列表。它们只是不一定是正确的列表。
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多