RULEOK
und kann die beiden Werte OK
und BAD
annehmen. OK
bedeutet, daß der durch irule
, op
und sub_op
selektierte
Regelteil erfolgreich durchgeführt wurde, wogegen BAD
einen Fehler anzeigt. Ein Fehler in diesem Sinne kann sein, daß die Bedingungen für diese Reaktion nicht erfüllt sind oder tatsächlich ein Fehler aufgetreten ist. Der
Regelfunktionsaufruf wird dann verworfen und es wird versucht, den Aufbau des Reaktionsnetzwerks fortzusetzen. Der Grundaufbau einer Regeldatei sieht folgendermaßen aus:#include "rx_eifc.h" #include "rx_datex.h" #include <iostream.h> #include "rules.h" RULEOK rules_cc (ostream &print, rx_eifc *eifc, rx_datex *val, int irule, OP op, int sub_op, int test, int trace) { // Deklaration der Variablen switch (irule) { case GLOBAL: // globale Regelinformationen case 1: // Regel 1 case 7: // Regel 7 default: return BAD; } return OK; }In Tcl sieht der entsprechende Code folgendermaßen aus:
proc Tcl_rule {} { global_name # Deklaration der Variablen irule op sub_op test trace switch $irule { GLOBAL { # globale Regelinformationen } RULE_1 { # Regel 1 } RULE_7 { # Regel 7 } default { return BAD } } }Dabei ist zu beachten, daß in Tcl die Aufrufparameter
irule
, op
, sub_op
, test
und trace
mit der Prozedur global_name
auf die entsprechenden globalen Tcl-Variablen gelinkt werden.
Die Pointer auf die Objekte der Klassen rx_datex
und rx_eifc
sind in Tcl nicht sichtbar, werden aber von den definierten Funktionen intern verwendet. Für rx_datex
sind dies get
, put
, getco
und putco
. Die Funktionen, die den rx_eifc
-Pointer intern verwenden, sind hier wegen ihrer größeren Anzahl nicht aufgeführt. Für die ostream
-Referenz print
gibt es in Tcl ein zu puts
stdout
äquivalentes Kommando print
, das auf den vom Kernsystem zur Verfügung gestellten Stream schreibt.Eine mögliche Fehlerquelle in Tcl sind die Kommentare (# ...). Die Kommentare erfahren in Tcl keine Sonderbehandlung, sondern das #-Zeichen ist ein Befehl, der alle seine Argumente verwirft. Aus diesem Grunde dürfen Kommentare nicht an allen Stellen der Tcl-Prozedur stehen, sondern nur an Stellen, an denen auch andere Kommandos enthalten sein dürfen. Der nachfolgende Ausschnitt verdeutlicht dies.
proc Tcl_rule {} { global_name # ok switch $irule { GLOBAL { # ok } # Fehler RULE_1 { # ok set n 1 # Fehler # ok } default { return BAD } } }