如果嵌套 CLIPS

if nested CLIPS

nested if CLIPS 的正确语法是什么?

(defrule determina-si-tiene-gripe ""
?A <- (enfermedad (Gripe nose) (compostura))
=>
(if (si-o-no-p "Tiene Fiebre(si/no)? ")
 (if (si-o-no-p "Tiene dolores en el cuerpo(si/no)? ")
     if (si-o-no-p "Tiene dolor de garganta(si/no)? ")
      then (modify ?A (Gripe si)(compostura "El paciente tiene un Resfrio"))
    else (modify ?A (Gripe no)))
 else (modify ?A (Gripe no)))
else (modify ?A (Gripe no))))

嵌套的 if-the-else 只是 then or else 分支中的另一个动作,如 doc:

中所述

Any number of allowable actions may be used inside of the then or else portion, including another if...then...else structure.

所以它应该是这样的

(if (si-o-no-p "Tiene Fiebre(si/no)? ")
  then
  (if (si-o-no-p "Tiene dolores en el cuerpo(si/no)? ")
    then
    (if (si-o-no-p "Tiene dolor de garganta(si/no)? ")
      then
      (modify ?A (Gripe si)(compostura "El paciente tiene un Resfrio"))
      else (modify ?A (Gripe no)))
    else (modify ?A (Gripe no)))
  else (modify ?A (Gripe no))))

然而,您的示例似乎不需要嵌套 if,所需要的只是一个 if 和多个条件:

(if (and (si-o-no-p "Tiene Fiebre(si/no)? ")
         (si-o-no-p "Tiene dolores en el cuerpo(si/no)? ")
         (si-o-no-p "Tiene dolor de garganta(si/no)? "))
  then
  (modify ?A (Gripe si)(compostura "El paciente tiene un Resfrio"))
  else (modify ?A (Gripe no)))

(似乎涉及用户输入,但这无论如何都可以工作)