Many of the standard frame names defined in this section do not always correspond to actual implemented frames in every FRS. The standard frame names are mainly intended to be used in slot value-type definitions (to specify the range of possible values of a slot). For this use, only certain GFP operations need be defined for these standard frame names (although the implementer is free to define more than the minimum required operations). These standard frame names can therefore be thought of as defining a set of ``pseudo frames'' -- since not all GFP operations are defined for them, they need not have the same degree of existence in the KB as do most frames. (For example, it would make no sense to want to change some slot value of the frame :INTEGER.) Specifically, the GFP operations that must be defined for these frames are:
get-frame-name frame-eql create-slot
The intention then is that these pseudo-frames can be values supplied to operations such as put-facet-values (to alter the :value-type facet for example). Any frame retrieved from a facet such as the value-type facet can be converted to a standard frame name using get-frame-name , and can be compared to a standard frame name using frame-eql . In addition, we can supply the frame :thing as the attach-to argument of create-slot .
:THING is the root of the class hierarchy for every KB, meaning that :THING is the super of every user-defined class that has no user-defined superclass. (Some FRSs have no physical counterpart to :THING.)
:CLASS is the class of all classes. That is, every frame that is a class is an instance of :CLASS. Asking whether a frame is a class is equivalent to asking whether it is one of the all-instances of :CLASS.
:INTEGER is the class of all integers. It is useful when describing value type restrictions on slots. It includes positive and negative integers, and has the same definition as Lisp's INTEGER type (i.e., it is not limited to FIXNUMs).
:NUMBER is the class of all numbers. It is useful for specifying value type restrictions on slots. Applications should not rely on assumptions about the precision of numbers when declaring value type restrictions in KBs. If precision is an issue, then the application should be responsible for maintaining and validating the format of data in slots.
:STRING is the class of all text strings, things for which Common Lisp's stringp function returns true.
:SYMBOL is the class of all Common Lisp symbols, things for which Common Lisp's symbolp function returns true.
:LIST is the class of all lists. It is useful for specifying value type restrictions on slots.
:SEXPR is the class of all s-expressions, and is equivalent to the disjunction of :SYMBOL or :LIST.
:SEQUENCE is the class of all sequences, including lists, arrays, and strings. It is useful for specifying value type restrictions on slots.