0
我正在寻找一种基于否定条件删除事实的方法。例如创建以下事实后:CLIPS负面条件
CLIPS>
(deffacts Cars
(color red)
(color green)
(color yellow)
(doors three)
(doors five))
CLIPS>
(defrule combinations
(color ?color)
(doors ?doors)
=>
(assert (car ?color ?doors)))
CLIPS> (reset)
CLIPS> (run)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (color red)
f-2 (color green)
f-3 (color yellow)
f-4 (doors three)
f-5 (doors five)
f-6 (car red five)
f-7 (car green five)
f-8 (car yellow five)
f-9 (car red three)
f-10 (car green three)
f-11 (car yellow three)
For a total of 12 facts.
CLIPS>
我期待在删除部分用下面的语句的事实:
(defrule clear
?q1 <- (car ?color~green five)
=>
(retract ?q1)
(printout t "Cars cleared " ?q1 crlf)
)
这应该删除汽车行驶五两扇门和颜色不是绿色的。因此应删除ID f-6和f-8。并打印已删除的事实。
该声明不会给我一个错误,但如果我执行(运行)它不收回或打印出声明。我猜测情况并不正确,但我不知道如何写这种否定的条件。
感谢
你也可以用你的原始规则颜色&〜绿?用&添加的值在事实的第一个位置必然是?颜色,第一个位置不能是绿色。如果没有&,?颜色就会被绑定到事实上的第一个位置,而第二个位置不能是绿色的。 –
感谢加里给你的见解。我最终会得到它的窍门:-) – Selrac