我试图在CLIPS中定义一个大于规则,但它似乎没有起作用。关于我如何解决它的任何想法。问题似乎发生在 defrule btwn100and120 。
(defrule part-credits
(or (current-part "a")
(current-part "b")
(current-part "c"))
=>
(bind ?reply (get-text-from-user "How many points did you achieve?"))
(assert (part-credits ?reply))
)
(defrule btwn100and120
(part-credits => 100)
(part-credits <= 120)
=>
(bind ?reply (get-text-from-user "Did you Part A before the changes? (y/n)"))
(assert (btwn100and120 ?reply))
)
答案 0 :(得分:4)
使用test
功能进行数值比较。另请注意,CLIPS对数学运算符使用前缀表示法。这是一个简化的规则,可以满足您的需求:
(defrule MAIN::btwn100and120
(part-credits ?val)
(test (<= ?val 120))
(test (>= ?val 100))
=>
(printout t "Value " ?val " is in range." crlf)
)
这是对规则的测试:
CLIPS> (watch facts)
CLIPS> (watch activations)
CLIPS> (assert (part-credits 99))
==> f-0 (part-credits 99)
<Fact-0>
CLIPS> (assert (part-credits 110))
==> f-1 (part-credits 110)
==> Activation 0 btwn100and120: f-1
<Fact-1>
CLIPS> (run)
Value 110 is in range.
CLIPS>