Jess规则编写与底层原理深度解析
1. Jess规则与查询基础
在Jess中,我们可以定义规则来基于工作内存的内容采取行动,也能编写查询来程序性地调查工作内存。规则和查询都能使用约束(对事实槽数据的条件)和条件元素(事实之间的关系)来对工作内存元素提出详细要求。
1.1 查询结果处理
查询结果通过 (while (?it hasNext) ...(call ?it next))
控制结构进行遍历。每个结果是一个 jess.Token
对象,它是 jess.Fact
对象的集合,每个 Token
保存查询的一个匹配结果。我们通过调用 jess.Token
的 fact()
方法来获取 Token
内的单个 jess.Fact
对象。由于每个匹配开始都有一个额外的查询触发事实,所以 fact()
方法的参数是1而不是0。获取到正确的事实后,使用 fact-slot-value
函数提取名称槽的内容。
1.2 变量声明
查询中可能出现两种不同类型的变量:查询内部变量和外部变量。Jess默认查询中的所有变量都是内部变量,若要使用外部变量,需使用以下语法显式声明:
(declare (variables ?x ?y ...))
使用 run-query