clips - CLIPS 条件元素不匹配但规则已激活
问题描述
我有以下 CLIPS 脚本。我正在尝试获取如果未知且已知,则应激活p1, p2, p3
最后一条规则的值。get-p2-2
p2
p3
(defrule main
(initial-fact)
=>
(assert(fact (read))) ; user enters 1
(assert(p1 unknown))
(assert(p2 unknown))
(assert(p3 unknown))
)
;;;=====================================================
(defrule get-p1
(fact 1)
(p1 unknown)
=>
(printout t"p1 known"crlf)
(assert (p1 known)))
;;;======================================================
(defrule get-p2
(fact 1)
(p1 known)
(p2 unknown)
=>
(printout t "p2 known"crlf)
(assert (p2 known))
(assert (fact 2)))
;;;======================================================
(defrule get-p3
(fact 2)
(p3 unknown)
=>
(printout t"p3 known"crlf)
(assert (p3 known)))
;;;======================================================
(defrule get-p2-2
(fact 2)
(p2 unknown)
(p3 known)
=>
(printout t "p2 known"crlf)
(assert (p2 known)))
而是p2
在规则中广为人知get-p2
。因此,该规则get-p2-2
不应该被激活。但它确实被激活了,我得到了输出
p1 known
p2 known
p3 known
p2 known ; this should not be here
为什么被get-p2-2
激活?
解决方案
您不会撤回任何未知事实,因此 p1、p2 和 p3 都是已知和未知的,这允许激活 get-p2-2。
CLIPS> (reset)
CLIPS> (run)
1
p1 known
p2 known
p3 known
p2 known
CLIPS> (facts)
f-0 (initial-fact)
f-1 (fact 1)
f-2 (p1 unknown)
f-3 (p2 unknown)
f-4 (p3 unknown)
f-5 (p1 known)
f-6 (p2 known)
f-7 (fact 2)
f-8 (p3 known)
For a total of 9 facts.
CLIPS>
在 get-p1、get-p2 和 get-p3 中提取未知的事实,你会得到你想要的结果。
(defrule get-p1
(fact 1)
?f <- (p1 unknown)
=>
(retract ?f)
(printout t "p1 known" crlf)
(assert (p1 known)))
推荐阅读
- exception - com.microsoft.sqlserver.jdbc.SQLServerException:列名“VALUE”无效
- python - Pandas:对值进行排序,将一个特定值保留在底部
- python - 删除数据帧的每个标记化行中的停用词
- javascript - VS2017(Apache Cordova)中缺少调试设备
- javascript - React Native:使用 .map 而不是 Flatlist 好吗?
- javascript - jest-allure 的 Javascript allure-results 指定输出目录
- angular - 单元测试时如何模拟 Angular BehaviourSubject
- android - 列表视图未显示我来自 FIREBASE 的项目
- .net - 设置 CultureInfo.CurrentCulture 也设置 CurrentUICulture,反之亦然
- jenkins - 无法在詹金斯发布针对 Maven 项目的魅力报告