2014-02-19 4 views
0

В Drools можно объединить правила в файле DRL так или иначе, как только они определены. Например, если у меня есть два правила, как это:Объединение логики правил в Drools Expert

rule A 
// definition 
end 

rule B 
// definition 
end 

Можно ли иметь еще одно правило, которое достигает логики, как: А или Б?

ответ

0

Два правила A и B : - логический эквивалент A или B (не xor).

Вы не можете ссылаться на другое правило, но вы можете определять запросы и вызывать два (или более) запроса в одном и том же состоянии LHS.

Однако общая схема вашей логики может сделать совершенно другой подход более целесообразным, когда совпадения различных правил становятся осязаемыми путем вставки в виде производных фактов, известных как обслуживание истины.

rule A when ... then 
    insertLogical(new Fired("A")); 
end 
rule B when ... then 
    insertLogical(new Fired("B")); 
end 
rule AorB when 
    Fired(rule == "A" || rule == "B") // other patterns for other combinations, e.g. && 
then 
    ... 
end 

Для уточнения рекомендаций потребуется более подробная информация.

+0

Это хорошо работает для моей ситуации. Я пытаюсь моделировать состояние системы. Таким образом, я смогу захватить и уведомить Drools о состоянии системы с правилами, а затем сделать выводы позже. –

0

Вы также можете посмотреть группу активации, которая будет запускать одно правило и отменять остальные.

Смежные вопросы