给定初始工作记忆 WM={(lista e b a c d e a) (lista1 a c a d e e f g)} 和规则 R1,显示最终 WM 的状态

Given the initial working memory WM={(lista e b a c d e a) (lista1 a c a d e e f g)} and the rule R1, show the state of the final WM

(defrule R1 
      ?f <‐ (lista  $?x ?a $?y)
            (lista1  $?p ?a $?q ?a  $?r)

      => 
          
          (retract ?f)
          (assert (lista $?x $?y)))

一个。 {(lista e b a c d f g) (lista1 a c a d e e f g)}
B. {(lista b) (lista1 a c a d e e f g) }
C。 {(lista b c d) (lista1 a c a d e f g)}
D. {(lista e b a c d) (lista1)}

我明白lista1没有变,但是为什么b,c,d留在lista?

在模式中多次出现的变量必须具有相同的值才能匹配规则。变量 ?a 在第一个模式中出现一次,在第二个模式中出现两次。多字段变量 $?x, $?y, $?p, $?q$?r 都各出现一次,因此由于它们的定位,它们将绑定到与 [=13= 不匹配的模式中的任何剩余值]?a。然后规则的操作将删除在 lista1lista.

中至少两次找到的任何值
         CLIPS (6.4 2/9/21)
CLIPS> 
(defrule R1 
   ?f <- (lista  $?x ?a $?y)
   (lista1  $?p ?a $?q ?a  $?r)
   =>        
   (retract ?f)
   (assert (lista $?x $?y)))
CLIPS> (watch facts)
CLIPS> (assert (lista e b a c d e a) (lista1 a c a d e e f g))
==> f-1     (lista e b a c d e a)
==> f-2     (lista1 a c a d e e f g)
<Fact-2>
CLIPS> (run)
<== f-1     (lista e b a c d e a)
==> f-3     (lista e b a c d e)
<== f-3     (lista e b a c d e)
==> f-4     (lista b a c d e)
<== f-4     (lista b a c d e)
==> f-5     (lista b c d e)
<== f-5     (lista b c d e)
==> f-6     (lista b c d)
CLIPS>