EMA-XPS Online


DEFINE-RULESET-TASK

DEFINE-RULESET-TASK
===================
Syntax: (define-ruleset-task 
           <Regelmenge-Task-Name>
           <Task-Arguments>
           [:DOCUMENTATION <Dokumentation>]
           [:EXPLANATION <Erklärung>]
           [:SUBTASKS <Liste-mit-Subtasks>]
           :MODE {:SEQUENTIAL |:FORWARD |:BACKWARD}
           [:CONFLICT-RESOLUTION {NIL| :FIRST
           MATCH| :OLDEST-MATCH| :NEWEST-MATCH}]
           ACTIONS
           {<Vorwärts-Aktion> | 
            <Sequentielle-Aktion>|
            <Rückwärts-Aktion> | 
            <Task-Aktion>}*)

Warnung: Der Erklärungseintrag wird durch 
         EMA-XPS nicht unterstützt, d.h.
         :explanation und :subtasks werden 
         ignoriert.
         :CONFLICT-RESOLUTION wird noch nicht
         unterstützt!
         Nur die Sequentielle-Aktion wird
         momentan unterstützt!
         Der Schlüssel :no-rules arbeitet
         momentan noch anders!

Jede Regel, die Sie definieren, muß einer 
Regelmenge zugeordnet werden. In der Regel-
menge wird vor allem die Abarbeitung der 
Regeln genauer bestimmt. Es gibt drei ver-
schiedene Modi, unter denen Sie auswählen
können: vorwärts, rückwärts und sequen-
tiell. Wenn Sie die Vorwärtsverkettung 
wählen, wird eine Konfliktmenge gebildet,
in der Sie festlegen, welche Suchstrategie
(first match, newest-match, oldest-match)
angewendet wird.


<Sequentielle-Abarbeitung>

Bei einer sequentiellen Abarbeitung wird
die Reihenfolge der Regeln auch bei mehr-
maligem Durchlaufen der Regelmenge strikt
gewahrt. Dabei können Regeln wiederholt mit
der gleichen Instanziierung angewendet wer-
den.
Die Reihenfolge wird entweder durch die
Priorität der Regeln bestimmt oder durch
die Aufschreibreihenfolge, wenn keine 
Prioritätsangabe vorhanden ist.

Für die sequentielle Vorwärtsverkettung
werden verschiedene Auswertungstaktiken
angeboten:

do-one ==> {nil | :no-rules}

Das System wertet die erste ausführbare
Regel aus und kehrt zum Aktionsteil der 
Regelmengen-Task zurück. Läßt sich keine
Regel ausführen, wird ':no-rules' zurück-
gegeben, andernfalls nil.

do-all ==> {nil | :no-rules}

Alle Regeln in der Sortierreihenfolge werden
geprüft und ausgewertet. Läßt sich keine
Regel ausführen, wird ':no-rules' zurückge-
geben, andernfalls nil.

do-while <condition> 
    ==> {:condition-failed | :no-rules}

Ist die Form <condition> erfüllt, werden
die Regeln in Sortierreihenfolge geprüft und
die erste ausführbare Regel ausgewertet.
Anschliessend wird wie beim ersten Durchgang
verfahren, bis <condition> nicht mehr erfüllt
ist oder alle Regeln geprüft wurden. Im
ersten Fall wird ':condition-failed' zurück-
gegeben, andernfalls ':no-rules'.

do-until <condition>
    ==>{:condition-succeded | :no-rules}

Die Regeln werden in Sortierreihenfolge
geprüft und die erste ausführbare Regel
wird ausgewertet. Ist die Lisp-Form 
<condition> noch nicht erfüllt, so wird wie
beim ersten Durchgang verfahren bis <con-
dition> erfüllt ist oder alle Regeln ge-
prüft wurden. Im ersten Fall wird 
':condition-succeeded' zurückgegeben, 
andernfalls ':no-rules'.


<Vorwärtsverkettung>
Die Regeln werden in der Sortierreihenfolge
getested und Regeln mit gültigen Instanzi-
ierungen in eine Konfliktmenge gestellt. Aus
dieser Menge wird gemäß festgelegter 
Konfliktlösung eine einzige Regel ausgewählt
und für alle Instanziierungen ausgewertet.

Nach Auswertung einer Regel werden die Regeln
erneut nach Sortierreihenfolge getestet. Bei
Regeln, die schon ausgewertet wurden, wird
geprüft, ob sich neue Instanziierungen er-
geben. Nur für diese werden Regeln erneut
ausgewertet.

Eine Regel ohne logische Variable wird 
höchstens einmal ausgewertet. Schon einmal
getestete Regeln werden nur dann erneut
getestet, wenn im Prämissenteil ein Prädikat
auftritt, für das ein tell, untell oder retell
erfolgte. 

do-exhaustive ==> {nil | :no-rules}

Warnung: noch nicht implementiert!

Der eben erläuterte Zyklus wird solange durch-
laufen, bis keine Regeln mehr auswertbar sind.
Läßt sich keine Regel ausführen, wird
':no-rules' zurückgegeben andernfalls nil.

do-while <condition>
   ==> {:condition-failed | :no-rules}

Vor jedem Durchlauf des oben erläuterten
Zyklus wird getestet, ob die Lisp-Form 
<condition> erfüllt ist. Die Auswertung 
bricht ab, wenn <condition> nicht mehr er-
füllt ist oder alle Regeln geprüft wurden.
Im ersten Fall wird ':condition-failed' 
zurückgegeben andernfalls ':no-rules'.

do-until <condition>
      ==> {:condition-succeded | :no-rules}

Nach jedem Durchlauf des oben erläuterten
Zyklus wird getestet, ob die Lisp-Form 
<condition> erfüllt ist. Die Auswertung
bricht ab, wenn <condition> eintritt oder alle
Regeln geprüft wurden. Im ersten Fall wird
':condition-succeded' zurückgegeben andernfalls
':no-rules'.


Formen der Konflikt-Lösung

:first-match
Die erste anwendbare Regel wird ausgewertet.

:newest-match
Die erste anwendbare Regel im jüngsten 
Abarbeitungszyklus wird ausgewählt.

:oldest-match
Die erste anwendbare Regel im ältesten Ab-
arbeitungszyklus wird angewendet.


<Rückwärtsverkettung>

Innerhalb von rückwärts verketteten Regel-
mengen gibt es nur eine einzige Regelauswer-
tungstaktik, die versucht, die continuation-
form zu verifizieren.

verify <verify_Ausdr> [:once] {<conti-form>}+

Warnung: noch nicht implementiert!

Es wird eine gültige Instanziierung von 
<verify_Ausdr> ermittelt und anschliessend die
<conti-form> mit dieser Instanziierung ausge-
wertet. Fehlt ':once', wird nach weiteren 
Instanziierungen gesucht. (Es wird nicht
geprüft, ob eine Instanziierung bereits
aufgetreten ist.)

VERIFY wertet, wie ask, die <conti-form> aus.
Dabei werden alle direkt ablesbaren Instanzi-
ierungen sowie alle ableitbaren 
Instanziierungen generiert und für jede der
Instanziierungen die <continuation> Formen
ausgeführt.

Beispiel: >(define-ruleset-task URLAUBSANGEBOT
              (ein-kunde)
              :documentation 
                 "Bestimmt Urlaubsangebot"
              :explanation (:description
                 (("Erstellt 
                 ein Urlaubsangebot")))
              :mode :SEQUENTIAL
              actions
               (kb-format "~%Ich gebe Ihnen
                  eine Auswahl von möglichen
                  Urlaubsinteressen")
               (do-one)
               (kb-format "~%Das ist alles
                  was ich weiß"))


EMA-XPS Online