有条件地退出 Jess 中的规则执行
Exit rule execution in Jess with condition
我正在阅读 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 并退出进一步的规则执行。有办法吗?
您可以使用 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)
)
我正在阅读 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 并退出进一步的规则执行。有办法吗?
您可以使用 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)
)