如何通过Jess中的规则添加事实?

时间:2015-09-22 00:42:19

标签: assert rule-engine jess inference-engine

我试过阅读关于Jess的教​​程,但我找不到任何有用的东西。我想建立一个程序,找出我正在谈论的工具。

因此,如果乐器有琴弦,我们就知道该乐器是弦乐器或打击乐器(即钢琴)类别。我如何编写一条规则来保存一个事实,即该类别是基于此标准的打击乐还是字符串?

我考虑过bind,但是不绑定意味着我必须为每个潜在的类别设置一个单独的变量?或者,我应该使用断言吗?

1 个答案:

答案 0 :(得分:2)

这演示了如何从规则中插入事实来存储一组可能的类别。

(deftemplate Instrument (slot strings))
(deftemplate Classification (multislot category))
(defrule cat-by-strings 
  ?i <- (Instrument (strings ?s&:(> ?s 0)))
=>
  (assert (Classification (category STRING PERCUSSION)))
)
(assert (Instrument (strings 18)))
(run)
(facts)

输出:

f-0   (MAIN::initial-fact)
f-1   (MAIN::Instrument (strings 18))
f-2   (MAIN::Classification (category STRING PERCUSSION))
For a total of 3 facts in module MAIN.

使用绑定变量是无用的,因为它们仅限于规则的上下文。