⚙️ Calcule 'non applicable si' pour les choix multiples

pull/47/head
Laurent Bossavit 2017-09-07 23:27:28 +02:00
parent 1426af4f6b
commit d50ae208fe
1 changed files with 6 additions and 6 deletions

View File

@ -71,6 +71,8 @@ export let clearDict = () => dict = {}
let fillVariableNode = (rules, rule) => (parseResult) => {
let evaluate = (situation, parsedRules, node) => {
let retrieveEvaluated = (cached, variable) => cached ? cached : evaluateNode(situation,parsedRules,variable)
let dottedName = node.dottedName,
// On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée
// En effet, l'évaluation dans le cas d'une variable qui a une formule, est coûteuse !
@ -81,11 +83,7 @@ let fillVariableNode = (rules, rule) => (parseResult) => {
variable = cached ? cached : findRuleByDottedName(parsedRules, dottedName),
variableIsCalculable = variable.formule != null && !R.path(['formule', 'explanation', 'une possibilité'])(variable),
parsedRule = variableIsCalculable && (cached ? cached : evaluateNode(
situation,
parsedRules,
variable
)),
parsedRule = variableIsCalculable && retrieveEvaluated(cached, variable),
// evaluateVariable renvoit la valeur déduite de la situation courante renseignée par l'utilisateur
situationValue = evaluateVariable(situation, dottedName, variable),
nodeValue = situationValue
@ -97,7 +95,9 @@ let fillVariableNode = (rules, rule) => (parseResult) => {
missingVariables = variableIsCalculable ? [] : (nodeValue == null ? [dottedName] : [])
let collectMissing = node =>
variableIsCalculable ? collectNodeMissing(parsedRule) : node.missingVariables
R.path(['formule', 'explanation', 'une possibilité'])(variable) ?
R.concat(collectNodeMissing(retrieveEvaluated(cached,variable)), node.missingVariables) :
variableIsCalculable ? collectNodeMissing(parsedRule) : node.missingVariables
let result = cached ? cached : {
...rewriteNode(node,nodeValue,explanation,collectMissing),