在CLIPS中删除相同的事实

时间:2013-05-18 21:53:14

标签: unique clips

如何在CLIPS中删除相同的事实?

假设我有

(事实2) (事实3) (事实2) (事实4)

我想只留下(事实2),(事实3)和(事实4)。我怎么能这样做?

3 个答案:

答案 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)
)