Greg Pfeil的Class Hierarchy图提供了Common Lisp类型系统的全面图片。但我试图更好地理解层次结构顶部的阶级关系。举一个简单的例子,让(defstruct person name age)
,然后(defparameter *p1* (make-person :name "Yosh" :age 19)
。现在Common Lisp类层次结构
(typep *p1* 'person)
T
(typep *p1* 'structure)
T
(typep *p1* 'structure-object)
T
(typep *p1* 'atom)
T
(typep *p1* t)
T
的Hyperspec说为
structure-object
的优先级列表只是本身t
。 和structure
是否在层次结构中没有类型?什么是
t
的所有直接亚型?更一般地说,如何检索任何给定类型的所有直接子类型或超类型(没有反复试验错误subtypep
)?或者,有没有办法遍历所有类型的列表? MOP是否提供了获取所有子类/超类的功能?通过与集合论的类比,似乎所有Common Lisp类型/类在理论上可以细分为两个子类
t
;即,standard-object
(对应于元件与像数字3,字符串“abc”,结构s1中,方法M1,等情况下),和standard-class
(对应于套与实例如类standard-object
,所述类别number
,类别structure-object
等)。如果这不是t
的实际细分,是否与实际实施有关;例如,避免层次结构中的递归类关系?
因为所有的类都有相应的类型,那么假设你可以使用'subtypep'来测试子类以及亚型?同样,如果需要访问实际的类对象,则可以使用'type-of'来发现任何对象的类型(basic或clos),而使用'class-of'? – davypough