(define-theory <theory-name> ([<theory-name>]*) [<docstring>] [:implementation <target-KR-system-name>] [:io-package <lisp-package-name>] [:issues <issue-tree>] <key-arg-pairs>*)
Macro for defining or modifying OntoLingua theories. No arguments are evaluated. See also CREATE-THEORY, which is the functional form.
<theory-name> a symbol which names the theory to be defined of modified. Package is significant. If an appropriate theory already exists, it will be updated. If *CLEAR-THEORIES-ON-REDEFINITION* is true [the default], the theory will be cleared upon redefinition.
<docstring> if supplied, should be a string describing the theory being defined or modified. This string will be stored as the documentation (of type OL:ONTO-THEORY) of the symbol which names the theory.
<key-arg-pairs> an alternating list of keywords an values preceded by an optional docstring. Supported keywords are shown below.
The remaining keyword arguments may occur in any order, and are described below:
:IMPLEMENTATION - The value of this keyword argument indicates the desired implementation for the theory to be defined or modified. It may be either a symbol (usually a keyword) which names an implementation, or a list whose first element is such a symbol. If a list, the tail of the list will be included in the init-plist of the CLOS object which represents the theory being defined or modified when it is instantiated or reinitialized, respectively. This provides a convenient way to individually tailor theory instances within a single implementation.
If this keyword is unspecified, the current implementation (see IN-IMPLEMENTATION) will be assumed.
:IO-PACKAGE - The value of this keyword arg should be a package or a symbol or string which names one; this value is put in the IO-PACKAGE slot on the theory object being defined or modified. User interface code which operates on behalf of the theory can then examine this slot for a suggestion of a good package to use when printing and reading.
:ISSUES - The value of this argument should be a Lisp "tree" of strings. The tree can be either a string, or a list of strings, or a list of (<label> <any-lisp-object>) pairs, where <label> is a string or symbol that names the type of the comment. For examples,
:issues ("This is a footnote about FOO." (:example (= (foo ?x) (inverse (bar ?x)))) ("Why not do it this way?
All other supplied keyword arguments will be spliced into the init-plist of the CLOS object which represents the theory being defined of modified when it is instantiated or reinitialized, respectively.