这是我的代码
(deffacts startup
(bird canary)
(colour-canary yellow)
(bird ostrich)
(can-not-fly ostrich)
)
(defrule r-bird-test
(bird ?var)
(not (bird ostrich))
=>
(printout t ?var " ****" crlf)
)
现在,当我(重置)和(运行)它没有打印" canary ****"。我没有正确使用非条件吗?任何人都可以指出我在这里失踪了吗?感谢。
答案 0 :(得分:2)
如上所述,如果存在事实(鸟鸵鸟),则非条件元素会阻止规则执行。由于执行(重置)后该事实存在,因此规则不会执行。如果你想要为每个鸟类事实执行规则,其中?var不是鸵鸟,你需要以这种方式编写规则:
CLIPS>
(deffacts startup
(bird canary)
(colour-canary yellow)
(bird ostrich)
(can-not-fly ostrich))
CLIPS>
(defrule r-bird-test
(bird ?var&~ostrich)
=>
(printout t ?var " ****" crlf))
CLIPS> (reset)
CLIPS> (run)
canary ****
CLIPS>