In addition, the three basic kinds of symbol may be usefully grouped in two different ways, as we focus on where the related terms occur, and how they are constructed; the first categorization asks whether term trees are roots or not, and the second, whether they are leaves or not. Of these partitions, the first distinguishes top level terms from data, and the second, compound terms from constants.
The use of multiple inheritance, see Figure 8.5, allows the inheritance hierarchy to express both cases: a type is a label for either a predicate, top-level term, or else for an argument of another term; and in addition a type denotes either a compound term, or a constant.
The derived classes of Level, Predicate and Argument, together partition the types in accord with the fact that a top level term is labelled with a Predicate symbol, while Function and Constant symbols may be arguments to a term; and similarly, the children of Data, Compound and Constant, again partition the types as a term has internal structure or not.
Bill Pippin 2010-01-14