Greg Pfeil的类层次结构图提供了Common Lisp类型系统的全面概述。但我正在尝试更好地理解层次结构顶部的类关系。以一个简单的例子为例,让(defstruct person name age)
,然后(defparameter *p1* (make-person :name "Yosh" :age 19)
。现在
(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
。那么atom
和structure
不是层次结构中的类型吗?t
的所有直接子类型是什么?更一般地说,如何检索任何给定类型的所有直接子类型或超类型(而不使用试错的subtypep
)?或者,是否有一种方法可以迭代所有类型的列表?MOP是否提供了获取所有子/超类的函数?类比于集合论,所有Common Lisp类型/类理论上都可以分为两个
t
的子类别;即standard-object
(对应于具有实例的元素,例如数字3、字符串"abc"、结构s1、方法m1等),以及standard-class
(对应于具有实例的集合,例如类standard-object
、类number
、类structure-object
等)。如果这不是t
的实际细分,原因是否与实际实现有关,例如避免层次结构中的递归类关系?
subtypep
来测试子类以及子类型吗?同样地,您可以使用type-of
来发现任何对象(基本或 clos)的类型,而如果需要访问实际的类对象,则使用class-of
? - davypough