DEFINE-CONSTRAINT-PATTERN ========================= syntax: (define-constraint-pattern <Name> (<log-Var>+) [:DOCUMENTATION <Dokumentation>] [:EXPLANATION <Erklärung>] RULES (known (<log-Var>+) and-if <Komplexe-Prädikation> then {:INCONSISTENT | <Assign-Form>+}) Warnung: Der Erklärungseintrag wird durch EMA-XPS nicht unterstützt, d.h. :documentation und :explanation werden ignoriert. Das Constraint-Pattern bildet ein sogenanntes Muster für die Definition der Constraints. Was in einem Constraint-Pattern definiert wurde, kann für jedes einzelne Constraint abgearbeitet werden. Die KNOWN-Klausel bestimmt, welche der logischen Variablen gebunden sein müssen, damit die Regel zutrifft. Sie ist für jede Regel obligatorisch. Die if-Bedingung ist nicht obligatorisch, für sie gelten die Konventionen der BQL. Im Prämissenteil der Regel dürfen neben den als bekannt deklarierten Parametern zusätzliche logische Variablen auf- treten, aber keine Parameter, die nicht als bekannt deklariert sind. Lediglich die erste gültige Instanziierung der Regelprämisse wird ermittelt. Wenn ein Verhalten :inconsistent ist, wird das Con- straint abgebrochen. Die <assign-Form> weist der genannten Variablen einen Wert zu. Diese darf jedoch nicht als bekannt dekla- riert sein. Zusätzlich zu einem Constraint-Pattern müssen Sie noch die einzelnen Constraints definieren, für die dieses Verhalten zutreffen soll. Beispiel: >(define-constraint-pattern berechne-reale-kosten) (_reale-Kosten _Landes-Wuensche) :documentation "Berechnet die entstehenden Kosten für den Kunden bei Besuch der Länder _Landes-Wuensche." RULES (KNOWN (_Landes-Wuensche) THEN (is _reale-Kosten (berechne-kosten- der-kunde _Landes-Wuensche)))) >(define-constraint berechne-kosten-fuer- kunden OF berechne-reale-kosten FOR-EACH (ein-kunde (instances-of 'Kunde))) WITH [entstehende-Kosten ein-Kunde _reale-Kosten] [ziele ein-Kunde _Landes-Wuensche])