rule state

by jpeter06

HTML

<textarea id="resultados" cols="30" rows="8">
</textarea>

JavaScript

class RuleEval {
  ruleSet = new Map();
  addRule(rule, result) {
    this.ruleSet.set(rule, result);
  }
  evalRules(domain) {
    for ( const [rule, result ] of this.ruleSet ) {
      if ( rule(domain) ) return { rule: rule, result: result };
    }
  }
}

let ruleEval = new RuleEval();

ruleEval.addRule((facts) => facts.temp > 100 ,
'dont play golf!'
);
ruleEval.addRule(  (facts) =>  facts.outlook === 'sunny' &&  facts.temp > 95,
  'dont play golf!'
);
ruleEval.addRule(  (facts) =>  facts.outlook === 'overcast' &&
  facts.temp > 50 && facts.temp < 70 &&  ! facts.windy ,
'play golf!' );

let answer = ruleEval.evalRules(
{ outlook: 'overcast', temp: 155, windy: false});
if ( answer ) {
  var salida = document.getElementById('resultados');
  salida.value = `Rule: ${answer.rule} result: ${answer.result}`;
}