0

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

假设我有

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

我只想保留(事实 2)、(事实 3)和(事实 4)。我怎样才能做到这一点?

4

3 回答 3

0

CLIPS 通过执行以下操作允许重复的事实:

        (set-fact-duplication TRUE)
于 2021-02-27T22:10:13.360 回答
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> 
于 2021-03-01T18:24:42.643 回答
-1

好吧,我是这样做的

(defrule removeduplicates
    ?f1 <- (fact ?number1)
    ?f2 <- (fact ?number2)
    (test (eq ?number1 ?number2))
    =>
    (retract ?f1)
)
于 2013-05-21T09:50:53.157 回答