如何在CLIPS中删除相同的事实?
假设我有
(事实2) (事实3) (事实2) (事实4)
我想只留下(事实2),(事实3)和(事实4)。我怎么能这样做?
答案 0 :(得分:0)
CLIPS 允许重复的事实:
(set-fact-duplication TRUE)
答案 1 :(得分:0)
如另一个答案中所述,您必须先启用事实重复,然后才能创建重复事实,因此删除重复事实的最简单方法是首先不允许重复。如果您想允许重复,但要删除少数几个,然后比较事实地址以防止规则被匹配两种模式的一个事实激活:
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>
答案 2 :(得分:-1)
嗯,我这样做了
(defrule removeduplicates
?f1 <- (fact ?number1)
?f2 <- (fact ?number2)
(test (eq ?number1 ?number2))
=>
(retract ?f1)
)