Table of Contents

Function Define-Theory

(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.