EMA-XPS Online
DEFINE-RULE
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)))
EMA-XPS Online