如果嵌套CLIPS

时间:2015-10-06 16:12:33

标签: if-statement clips

如果是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))))

1 个答案:

答案 0 :(得分:0)

嵌套if-the-else只是其中的另一个动作,或者是分支,如doc中所述:

  

可以在then或else部分内使用任意数量的允许操作,包括另一个if ... then ... else结构。

所以它应该像

(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 (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)))

(似乎涉及用户输入,但无论如何这可能都有用)