home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / grdlagen / listing2.asc < prev    next >
Encoding:
Text File  |  1989-11-23  |  1.2 KB  |  50 lines

  1. global &Nach: Datum;
  2.  
  3. rule Sport1
  4. {
  5.      &E (Ereignis Art=Sport; Wann>=&Nach);
  6.      -->
  7.      call Process(&E);
  8. }
  9.  
  10. ------------------------------------------------------------
  11.  
  12. --
  13. -- &Endbed=Run(&Limit)
  14. --
  15. -- Run realisiert einen einfachen "Recognize-Act"-Zyklus
  16. -- für OPS83-Programme. &Limit ist die maximal erlaubte
  17. -- Zahl an Regeln, die feuern dürfen. &Limit=0 ermöglicht
  18. -- eine unbegrenzte Anzahl von Schleifendurchläufen. Run
  19. -- wird außerdem auch abgebrochen, wenn entweder das
  20. -- "conflict set" leer ist, oder aber von eine der Regeln
  21. -- die globale Variable &RUNFLAG auf FALSCH gesetzt wird.
  22. --
  23. -- Als Ergebnis wird die Endbedingung zurückgegeben.
  24. --
  25.  
  26. global &RUNFLAG: logical;
  27.  
  28. function Run(&Limit: integer): symbol
  29. {
  30.  local &cnt /* Zykluszähler */,
  31.        &Rule /* Regelnummer */: integer;
  32.  &RUNFLAG=1B;
  33.  &cnt=0;
  34.  while(&Limit=0 || &cnt<&Limit)
  35.  {
  36.      -- Wähle nächstes Element aus dem "conflict set"
  37.      &Rule=qselect(0);
  38.      if(&Rule=0) return(|Conflict Set leer!|);
  39.      -- Regel feuern
  40.      fire &Rule;
  41.      &cnt=&cnt+1;
  42.      -- Die eben ausgeführte Regel könnte RUNFLAG
  43.      -- geändert haben
  44.      if(~&RUNFLAG) return(|Abbruch durch Regel|);
  45.  }
  46.  return(|Zykluslimit überschritten|)
  47. }
  48.  
  49.  
  50.