Clips 不使用声明显著性的订单规则执行
这就是问题所在,假设我有两条规则。第二条规则取决于第一条规则。 例如:Clips 不使用声明显著性的订单规则执行,clips,fuzzy-logic,Clips,Fuzzy Logic,这就是问题所在,假设我有两条规则。第二条规则取决于第一条规则。 例如: (deftemplate person (slot name (type STRING)) (slot age (type STRING)) ) (deffacts start (person(name "Mike")(age "20")) (person(name "Laura")(age "22")) (person(name "Dean")(age "22")) (person(name "Charlie
(deftemplate person
(slot name (type STRING))
(slot age (type STRING))
)
(deffacts start
(person(name "Mike")(age "20"))
(person(name "Laura")(age "22"))
(person(name "Dean")(age "22"))
(person(name "Charlie")(age "22"))
)
(defrule filterage
(person (name ?n)(age ?a))
(test (eq ?a "22"))
=>
(assert (is-equal-to-22 ?n))
)
(defrule creategroup
(is-equal-to-22 ?c)
=>
(assert (is-in-22-years-old-group ?c))
)
正如所料,第二条规则在任何时候有规则1中的内容时都会触发
那么,我怎样才能让第二条规则等到所有人都被创建出来,而不使用declare salience你能解释一下defmodules的用途吗?而聚焦模块的作用是什么?我在6.40文档的最后一个剪辑中搜索了它,但找不到它。此外,我被迫使用FuzzyClips 6.10d,所以问题是这是否适用于我的FuzzyClips版本。感谢您抽出时间。基本编程指南的第10节介绍了将与FuzzyCLIPS 6.1一起使用的defmodule。
CLIPS (6.31 2/3/18)
CLIPS> (defmodule MAIN (export ?ALL))
CLIPS> (defmodule FILTER (import MAIN ?ALL))
CLIPS> (defmodule CREATE (import MAIN ?ALL))
CLIPS>
(deftemplate MAIN::av ; attribute value
(slot a)
(slot v))
CLIPS>
(deftemplate MAIN::person
(slot name)
(slot age))
CLIPS>
(deffacts MAIN::start
(person (name "Mike") (age 20))
(person (name "Laura") (age 22))
(person (name "Dean") (age 22))
(person (name "Charlie") (age 22)))
CLIPS>
(defrule MAIN::start
=>
(focus FILTER CREATE))
CLIPS>
(defrule FILTER::filterage
(person (name ?n) (age 22))
=>
(assert (av (a is-equal-to-22) (v ?n))))
CLIPS>
(defrule CREATE::creategroup
(av (a is-equal-to-22) (v ?c))
=>
(assert (av (a is-in-22-years-old-group) (v ?c))))
CLIPS> (watch rules)
CLIPS> (reset)
CLIPS> (run)
FIRE 1 start: *
FIRE 2 filterage: f-4
FIRE 3 filterage: f-3
FIRE 4 filterage: f-2
FIRE 5 creategroup: f-7
FIRE 6 creategroup: f-6
FIRE 7 creategroup: f-5
CLIPS>