proc | |||
(1) | |||
while do | |||
(2) | |||
(3) | |||
... | ... (alle weiteren zugelassenen Aufgaben) | ||
(n) | |||
end | |||
proc | |||
end |
Diese einfache Bibliothek hat einen ähnlichen Aufbau wie das obige Beispiel (siehe 3.3). Auf höchster Ebene werden priorisierte Stopp- und Weiter-Befehle verarbeitet. Darunter werden die definierten Aufgaben priorisiert verarbeitet. Für eine gleichberechtigte nebenläufige Verarbeitung müssten zusätzliche Fluenten verwaltet werden, da sich ansonsten zwei Aufgaben immer wieder gegenseitig stören könnten. Als Beispiel nehmen wir an, es liegt ein Kaffeeauftrag (I) für Position 1 und ein Briefauftrag (II) für Position 2 vor. Zunächst könnte I einen go-Gefehl zur Kaffeeküche absetzen, der Kaffee wurde aber noch nicht aufgeladen. Nun setzt II aber einen go-Befehl zu Position 2 ab. Wenn danach Auftrag I wieder aktiv ist, so muß der go-Befehl erneut abgesetzt werden. Die Prozedur sei hier exemplarisch für die Realisierung der Aufgaben angegeben. Sie wird aktiviert, sobald eine exogene Aktion den Fluenten setzt und in den oberen Ebenen keine Aufgaben mehr zu erfüllen sind. Der beste Auftrag in diesem Zusammenhang ist der am längsten existierende Auftrag. Solange CARL nicht bereits einen Kaffee aufgeladen hat, kann der benötigte Kaffee an der Kaffeemaschine geholt werden. Bei den Prozeduren und handelt es sich um Interaktionen mit dem Benutzer, die die Werte der Fluenten und abfragen. Dementsprechend kann Milch und Zucker in den Kaffee getan werden. Innerhalb dieser Struktur ist die Erweiterung um neue Aufgaben sehr einfach zu realisieren, da sie modular auf einer beliebigen Prioritätsebene eingefügt werden können.