package uk.ac.lkl.migen.system.ai.reasoning.rules;
import java.util.*;
import uk.ac.lkl.migen.system.ai.reasoning.rules.operand.LogicOperator;
/**
* A logical expression, either a disjunction or
* a conjunction with arbitrary arity.
*
* @author sergut
*
*/
public class LogicalExpression extends Rule {
LogicOperator op = null;
ArrayList<Rule> ruleList = null;
public LogicalExpression(LogicOperator op, Rule...rules) {
this.op = op;
for (int i=0; i < rules.length; i++) {
rules[i].addValueChangeListener(new RuleValueChangeListener() {
public void ruleValueChange(RuleValueChangeEvent e) {
boolean newValue = eval();
if (newValue != factValue) {
factValue = newValue;
fireValueChange(e);
}
}
});
this.ruleList.add(rules[i]);
}
}
private boolean eval() {
Boolean result = null;
for (Rule rule : ruleList) {
if (result == null) {
result = rule.factValue;
} else {
result = this.op.eval(result, rule.factValue);
}
}
return result;
// for (Iterator<Rule> itr = ruleList.iterator(); itr.hasNext();) {
// Rule rule = itr.next();
// booleanList.add(rule.factValue);
// }
// return op.eval(booleanList);
}
}
|