Я пытаюсь написать правило, которое применяется к набору фактов, основанных на содержании другого факта. Я упростил задачу до дома с комнатами. Допустим, у нас есть что-то вроде:
House(id);
Room(id, houseId, floor, side, paint);
Теперь, если я хочу запустить правило для всех Домов со всеми комнатами в левой части, нарисованными зеленым, я написал бы что-то вроде:
rule "Left side 1st floor green"
when
$h: House()
forall($r: Room(houseId=$h.id, floor==1, side=="left")
Room(id == $r.id, paint == "green"))
then
//Do whatever on rule triggering
end
Но что, если объекты в рабочей памяти организованы таким образом:
House(id, List<> roomIds);
Room(id, floor, side, paint);
Как я могу написать условие foreach (или любой другой подход), чтобы сделать то же самое в отношении комнат для данного дома? Имеет ли смысл или мне лучше попытаться реорганизовать свои объекты заранее, чтобы отношения были выражены наоборот?
Спасибо