您如何删除 CLIPS 中的相同事实?
假设我有
(事实 2) (事实 3) (事实 2) (事实 4)
我只想保留(事实 2)、(事实 3)和(事实 4)。我怎样才能做到这一点?
CLIPS 通过执行以下操作允许重复的事实:
(set-fact-duplication TRUE)
正如另一个答案中提到的,您必须先启用事实重复,然后才能创建重复的事实,因此删除重复事实的最简单方法是首先不允许它们重复。如果您想允许重复,但删除一些选择,然后比较事实地址以防止规则被一个匹配两种模式的事实激活:
CLIPS (6.31 6/12/19)
CLIPS> (set-fact-duplication TRUE)
FALSE
CLIPS> (assert (fact 2) (fact 3) (fact 2) (fact 4))
<Fact-4>
CLIPS>
(defrule remove
?f1 <- (fact ?number1)
?f2 <- (fact ?number2)
(test (and (eq ?number1 ?number2)
(neq ?f1 ?f2)))
=>
(retract ?f1))
CLIPS> (agenda)
0 remove: f-3,f-1
0 remove: f-1,f-3
For a total of 2 activations.
CLIPS> (run)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (fact 2)
f-2 (fact 3)
f-4 (fact 4)
For a total of 4 facts.
CLIPS>
好吧,我是这样做的
(defrule removeduplicates
?f1 <- (fact ?number1)
?f2 <- (fact ?number2)
(test (eq ?number1 ?number2))
=>
(retract ?f1)
)