В этом сообщении предлагается добавить некоторые классы фактов в качестве способа правил вложенности. http://drools.46999.n3.nabble.com/How-can-I-nested-rules-td4020488.html#a4020681Drools - правила вложения с использованием класса факсов
Что я хотел бы знать - существует ли гарантия того, что «Возраст и пол женщины» выполняются до «Беременные» и «Беременные» до «Беременности2»? Насколько я заметил, это всегда имеет место в моем приложении. Но документировано ли это где-то в документации по слюням или это просто карточный домик, который ждет краха?
rule "Age and gender women"
when
$p : Person(p1 >= 12 && p2 = 1)
then
insertLogical(new CouldHaveBeenPregnant($p));
end
rule "Pregnant"
when
$p : Person(p3 > 1)
CouldHaveBeenPregnant(person == $p)
then
insertLogical(new HasBeenPregnant($p));
end
rule "Pregnant2"
no-loop
when
$p : Person(p4 <= P3)
HasBeenPregnant(person == $p)
then
$p.setStatus("OK");
update($p);
end
Спасибо за помощь заранее
EDIT: возникает Моя проблема, когда я должен добавить новое правило, говорят «не беременна», где я должен сделать что-то, когда человек не HasBeenPregnant (person == $ p). Принцип вывода не работает иногда (как и ожидалось). Потому что иногда правило «не беременных» запускается первым, и выясняется позже, что человек беременен, а потом «беременна» становится правдой. Но результат для «не беременных» уже запущен.
Итак, любое предложение о том, как преодолеть это?
Насколько я знаю, порядок, в котором испытываются правила должны не имеет значения. Когда факт вставлен (или удален или изменен), который имеет отношение к некоторым другим правилам, эти правила снова проверяются. –