在帖子中Common Lisp 类层次结构 https://stackoverflow.com/questions/42514204/common-lisp-class-hierarchy、Rainer Joswig 和 Joshua Taylor 仔细区分了内置 Common Lisp 之间的一些差异types and classes,其中类构成基线的 CLOS 扩展的一部分。类型/类别(加上拖把)的区别也反映在 Pfeil 的综合层次图 http://sellout.github.io/media/CL-type-hierarchy.png。使用该图,似乎可以提取两个不同的层次结构。特别是,我目前对层次结构的顶层最感兴趣;即,直接子类型和子类t
(since t
既是类型又是类)。以下是从图中提取的一些临时子类型/子类:
对于类型层次结构,直接子类型t
似乎是atom
, character
, random-state
, hash-table
, restart
, readtable
, package
, pathname
, stream
, function
, array
, sequence
, number
, and condition
。所有其他类型,例如float
or list
是这些类型之一的子类型。类型层次结构也不是严格的层次结构(因为(subtype t t) => T
,但这似乎是唯一的例外)。 (ps:类型symbol
and structure-object
不包含在图中,但也可能是直接子类型t
.)
对于类层次结构,直接子类t
包括上述所有类型的相应类(除了atom
,也许structure-object
现在是standard-object
(?)),加上standard-object
.
MOP 通过添加类来扩展 CLOSmetaobject
(加上一些元子类),但似乎没有添加到直接子类t
.
有人可以验证这种理解是否正确,或提供额外的说明吗?
注意:我在上面的类型层次结构描述中发现了至少一个错误。所有列出的亚型(character
等)显然是子类型atom
,所以它们不是直接子类型t
。唯一的其他直接子类型t
似乎是sequence
,因为序列可以是cons
(非原子)。而且,symbol
事实上,包含在图中,并且也是atom
.