home *** CD-ROM | disk | FTP | other *** search
- global &Nach: Datum;
-
- rule Sport1
- {
- &E (Ereignis Art=Sport; Wann>=&Nach);
- -->
- call Process(&E);
- }
-
- ------------------------------------------------------------
-
- --
- -- &Endbed=Run(&Limit)
- --
- -- Run realisiert einen einfachen "Recognize-Act"-Zyklus
- -- für OPS83-Programme. &Limit ist die maximal erlaubte
- -- Zahl an Regeln, die feuern dürfen. &Limit=0 ermöglicht
- -- eine unbegrenzte Anzahl von Schleifendurchläufen. Run
- -- wird außerdem auch abgebrochen, wenn entweder das
- -- "conflict set" leer ist, oder aber von eine der Regeln
- -- die globale Variable &RUNFLAG auf FALSCH gesetzt wird.
- --
- -- Als Ergebnis wird die Endbedingung zurückgegeben.
- --
-
- global &RUNFLAG: logical;
-
- function Run(&Limit: integer): symbol
- {
- local &cnt /* Zykluszähler */,
- &Rule /* Regelnummer */: integer;
- &RUNFLAG=1B;
- &cnt=0;
- while(&Limit=0 || &cnt<&Limit)
- {
- -- Wähle nächstes Element aus dem "conflict set"
- &Rule=qselect(0);
- if(&Rule=0) return(|Conflict Set leer!|);
- -- Regel feuern
- fire &Rule;
- &cnt=&cnt+1;
- -- Die eben ausgeführte Regel könnte RUNFLAG
- -- geändert haben
- if(~&RUNFLAG) return(|Abbruch durch Regel|);
- }
- return(|Zykluslimit überschritten|)
- }
-
-