DEFINE-RULE =========== syntax: (define-rule <Regel-Name> <Regelmenge-Task-Name> [:DOCUMENTATION <Dokumentation>] [:EXPLANATION <Erklärung>] [:PRIORITY <Lisp-Typ: ganze-Zahl>] IF <Regel-Prämisse> {THEN | THEN-ONCE} <Regel-Konklusion>+) Warnung: Der Erklärungseintrag wird durch EMA-XPS nicht unterstützt, d.h. :documentation und :explanation werden ignoriert. Die Priorität wird hier ignoriert, Beim Laden einer babylon3 WB werden hoch- priorisierte Regeln vor niedriger priori- sierten in der Regelmenge einsortiert! Die oben angegebene Definitionsform beschreibt die genaue Syntax zum Erstellen einer Regel. <Regel-Name> ist dabei der Regelname, <Regelmenge- Task-Name> der Name der Regelmenge, der die neue Regel zugeordnet werden soll und dann folgen die optionalen Schlüsselwörter :documentation, :explanation und :priority, schließlich die Regel in der natürlichen Notation: if <linke-Seite> then <rechte-Seite> oder if <linke-Seite> then-once <rechte-Seite> Die Priorität ist eine ganze Zahl. Wenn mehrere Regeln eine gültige Instanziierung haben und die Regelauswertung durch die Priorität gesteuert werden soll, wird diejenige Regel zuerst aus- geführt, die die höchste Prioritätsnummer hat. In der Regelprämisse können Sie samtliche BQL- Ausdrücke und Lisp-Ausdrücke verwenden, sofern diese keine Seiteneffekte auf die Wissensbasis haben. In der Regelkonklusion können Sie samtliche BQL-Ausdrücke und Lisp-Ausdrücke verwenden. Hier werden Sie im allgemeinen mit tell oder retell die Wissensbasis verändern. Beispiel: >(define-rule URLAUBSAUSWAHL URLAUBSANGEBOT :documentation "Wählt eine Stadt aus" :explanation (("Diese Regel soll eine Stadt bestimmen")) :priority 1 IF [and [urlaubsinteresse ein-kunde _x] [laender _land] (kunde-zufrieden ein-kunde _land) [staedte _land _stadt] [angebote _stadt _angebot] (is-of-frame _angebot _x)] THEN (kb-format "~%Besuchen Sie ~: (~A~) in ~: (~A~)." (name-of _angebot) (name-of _stadt)))