DEFINE-CONSTRAINT-PATTERN ========================= syntax: (define-constraint-pattern <name> (<log-var>+) [:DOCUMENTATION <doc-string>] [:EXPLANATION <expl-expr.>] RULES (known (<log-var>+) and-if <complex-predication> then {:INCONSISTENT | <assign-form>+}) Warning: The explanation facility is not sup- ported, hence :documentation and :explanation are ignored. The constraint-pattern forms a pattern for the definition of the constraints. The defined content of the constraint-pattern kann be worked out for every single constraint. The KNOWN-clause determines which of the logical- variables have to be linked together, in order to have a true rule. The if-condition is not obligatory, the only conventions which are valid for it are those of the BQL. In the premise-part of the rules logical variables can be used in addition to the known para- meters, but no unknown parameters must be used. Only the first valid instance of the regulating premise will be searched for. If a behavior is :inconsistent, then the constraint will be stopped. The <assign-form> links a value to a variable, which must not be declared as 'known'. In addition to a constraint-pattern single constraints have to be defined for which this behavior has to be valid. example: >(define-constraint-pattern calculate-real-costs) (_real-costs _country-wishes) :documentation "calculates the costs for a visit of the countries _country-wishes." RULES (KNOWN (_country-wishes) THEN (is _real-costs (calculate-client- costs _country-wishes)))) >(define-constraint calculate-costs-for- client OF calculate-real-costs FOR-EACH (a-client (instances-of 'client))) WITH [complete-costs a-client _real-costs] [destinations a-client _country-wishes])