You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLIPS规则R1执行后工作内存(WM)最终状态及lista元素变化原因咨询

拆解CLIPS规则R1的执行过程:为啥lista最后只剩b、c、d?

先把核心信息摆出来:

  • 初始工作内存(WM):
    • (lista e b a c d e a)
    • (lista1 a c a d e e f g)
  • 规则R1的代码:
(defrule R1 
  ?f <- (lista $?x ?a $?y) 
  (lista1 $?p ?a $?q ?a $?r) 
  => 
  (retract ?f) 
  (assert (lista $?x $?y))
)

第一步:搞懂规则R1的逻辑

别被变量名?a误导——这只是个普通变量,它的作用拆解成3步:

  1. 从lista事实里抓出任意一个元素绑定到?a,同时把这个元素前后的内容分别存在$?x(前面的所有元素)和$?y(后面的所有元素);
  2. 检查lista1事实里是否至少有两个和?a相同的元素(也就是?a在lista1里是重复出现的);
  3. 如果满足上面两个条件,就删掉原来的lista,然后把$?x和$?y拼起来,生成一个去掉了这个?a元素的新lista。

第二步:找出lista1里的重复元素

看lista1的内容(lista1 a c a d e e f g),里面重复出现的元素有两个:

  • a:出现2次(第1、3位)
  • e:出现2次(第5、6位)

所以规则R1会反复匹配lista里的a和e,直到lista里再也没有这两个元素为止。

第三步:一步步追踪执行过程

初始lista:(e b a c d e a)

  1. 第一次执行(匹配?a = e):抓出lista里的第一个e,删掉它后,lista变成(b a c d e a);
  2. 第二次执行(匹配?a = a):抓出lista里的a,删掉它后,lista变成(b c d e a);
  3. 第三次执行(匹配?a = e):抓出lista里的e,删掉它后,lista变成(b c d a);
  4. 第四次执行(匹配?a = a):抓出lista里最后一个a,删掉它后,lista变成(b c d)。

此时lista里剩下的b、c、d,在lista1里都没有重复出现(b根本没出现,c和d各只出现一次),规则R1找不到匹配的模式,执行就停止了。

这就是为啥最后lista里只剩b、c、d,对应选项C的结果。

内容的提问来源于stack exchange,提问作者user12240282

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:52:37