前向规则包括三部分:
1. 唯一的名字;
2. foreach 子句(可选);
3. assert 子句。
foreach 子句,由多项 premise 组成。
premise 是 事实模式 或者 复合premise 或者 python premise 组成。
复合premise 有三种形式:
1. 'first' premise:在反向推理时会立刻失败,从而阻止后续的反向推理。
2. 'forall' premise:forall 和 require 子句合用,只要发现一个推理失败则整个premise就失败。如果忽略 require 子句,则 forall 返回 successful。
3. 'notany' premise:所有推理失败时,notany 子句返回 successful。notany 在反向推理时永远 fail。
asssert 子句是由 事实模式 或者 python 语句组成。
python 语句以 python 开始,后接 python 语句。这与python premise 不同。
python premise 有四种形式:
1. 模式 = python 表达式;
2. 模式 in python 表达式;
3. check python 表达式;
4. python 语句。
注:
1. 向模式变量赋值的唯一的方法是 <pattern> = <python expression>。不要试图在python 语句中改变模式变量。
2. python表达式或语句中使用的模式变量必须被约束;
3. 推理引擎无法访问 python 变量,这些变量也不能被其它规则的python语句访问。
4. when子句中的python变量,在其后的with语句中是无法访问的。若有需要,应当将python变量存储到模式变量中作为过渡。