在条件下在Jess中退出规则执行

时间:2017-12-03 03:28:18

标签: clips expert-system jess

我正在Jess中阅读几个用户输入。规则是:

(defrule specify-input
    ?act <- (Actuator (name 0) (inputVoltage ?v1&0) )
    =>
    (printout t "Please specify input voltage of the actuator. [V] " crlf)
    (modify ?act (inputVoltage (read)))
    (printout t "Please specify desired force of the actuator. [N] " crlf)
    (modify ?act (Force (read)))
    (printout t "Please specify desired stroke lenght of the actuator. [mm] " crlf)
    (modify ?act (StrokeLength (read))))

我希望能够检查输入电压的值,如果超出定义的范围,则将其设置为0并退出进一步的规则执行。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用if函数(参见Jess手册第3.8.2节)。

(printout t "Please specify input voltage of the actuator. [V] " crlf)
(bind ?v (read))
(if (and (> ?v 0) (<= ?v 1000)) then
  (printout t "Please specify desired force of the actuator. [N] " crlf)
  (bind ?f (read))
  (printout t "Please specify desired stroke lenght of the actuator. [mm] " crlf)
  (bind ?sl (read))
  (modify ?act (inputVoltage ?iv)(Force ?f)(StrokeLength ?sl))
) else (
  (printout t "invalid voltage" crlf)
)

也可以对其他值进行类似的检查。

但不应该让用户有另一次机会吗?参看第3.8.1节。

(while true do
  (printout t "Please specify input voltage of the actuator. [V] " crlf)
  (bind ?v (read))
  (if (and (> ?v 0) (<= ?v 1000)) then (break))
  (printout t "invalid voltage, not in (0,1000]" crlf)
)