Artificial intelligence 通过增加剪辑中某个值的顺序来输出特定事实
我有以下事实清单:Artificial intelligence 通过增加剪辑中某个值的顺序来输出特定事实,artificial-intelligence,clips,expert-system,Artificial Intelligence,Clips,Expert System,我有以下事实清单: f-0 (initial-fact) f-1 (fact 1 [input_1] 21) f-2 (fact 1 [input_2] 28) f-3 (fact 1 [input_3] 10) f-4 (fact 1 [input_4] 25) f-5 (fact 1 Normal Operation!) f-6 (fact 2 [input_1] 7) f-7 (fact 2 [input_2] 25) f-8 (fac
f-0 (initial-fact)
f-1 (fact 1 [input_1] 21)
f-2 (fact 1 [input_2] 28)
f-3 (fact 1 [input_3] 10)
f-4 (fact 1 [input_4] 25)
f-5 (fact 1 Normal Operation!)
f-6 (fact 2 [input_1] 7)
f-7 (fact 2 [input_2] 25)
f-8 (fact 2 [input_3] 13)
f-9 (fact 2 [input_4] 15)
f-10 (fact 2 adder a1 error!)
f-11 (fact 3 [input_1] 11)
f-12 (fact 3 [input_2] 17)
f-13 (fact 3 [input_3] 24)
f-14 (fact 3 [input_4] 31)
f-15 (fact 3 multiplier p1 error!)
有没有办法从所有这些事实中选择并打印出只包含错误数量和类型的事实?例如,我想按递增顺序打印:
1 Normal Operation!
2 adder a1 error!
3 multiplier p1 error!
请注意,我实际上有更多的事实,它们在事实列表中的顺序并不是如我所示的递增顺序。所以我必须设法让它增加。非常感谢Gary先生!我正在使用ClipsEditor,它说这行有一个问题:(查找所有事实((?f事实))。但是,当我运行它时,它可以工作。您知道这里的错误是什么吗?您还可以向我解释一下defrule print是如何工作的吗?CLIPSEditor可能不理解find all facts命令的语法。print rule使用find all facts函数来检索第二个位置不包含实例名称的所有事实它使用sort函数根据第一个位置对事实进行排序。然后foreach函数迭代已排序的事实,打印其中包含的数据。
CLIPS (6.31 2/3/18)
CLIPS>
(deffacts initial
(fact 1 [input_1] 21)
(fact 1 [input_2] 28)
(fact 1 [input_3] 10)
(fact 1 [input_4] 25)
(fact 1 Normal Operation!)
(fact 2 [input_1] 7)
(fact 2 [input_2] 25)
(fact 2 [input_3] 13)
(fact 2 [input_4] 15)
(fact 2 adder a1 error!)
(fact 3 [input_1] 11)
(fact 3 [input_2] 17)
(fact 3 [input_3] 24)
(fact 3 [input_4] 31)
(fact 3 multiplier p1 error!))
CLIPS>
(deffunction compare-1st (?f1 ?f2)
(> (nth$ 1 (fact-slot-value ?f1 implied))
(nth$ 1 (fact-slot-value ?f2 implied))))
CLIPS>
(defrule print
=>
(bind ?facts
(find-all-facts ((?f fact))
(not (instance-namep (nth$ 2 ?f:implied)))))
(bind ?facts (sort compare-1st ?facts))
(foreach ?f ?facts
(bind ?data (fact-slot-value ?f implied))
(printout t (implode$ (first$ ?data)) " "
(implode$ (rest$ ?data)) crlf)))
CLIPS> (reset)
CLIPS> (run)
1 Normal Operation!
2 adder a1 error!
3 multiplier p1 error!
CLIPS>