傻瓜纯洁思想里的沙子

愿意当傻瓜的人都快乐
posts - 7, comments - 3, trackbacks - 0, articles - 11

1.3 Knowledge Representation

Posted on 2006-10-08 10:13 哈迪尤 阅读(347) 评论(0)  编辑  收藏
                                                                             Knowledge Representation

   1.3.1 Production Rules
           规则或Production Rules在Drools里由规则成立时处理动作(LHS)和规则不成立时处理动作(RHS)两部分和其它下面一些而外的属性组成。
               。salience
               。agenda-group
               。auto-focus
               。activation-group
               。no-loop
               。duration

 

rule “<name>”    
    
<attribute> <value>    
    when        
        
<LHS>    
    then        
        
<RHS>
end
      LHS由规则的名称和逻辑组合条件组成。下面则是符合规则条件下要执行的指定的动作。中间属性列用来约束初始数据。 
      Drools现在支持的逻辑条件有:
      。“and”
      。“or”
      。“not”
      。“exists”
      "forall"和"accumulate"在不久也会加入。下面的字段约束是容许的
      。Literal Constraint                 (字符串约束)
      。Bound Variable Constraint   (变量范围约束)
      。Return Value                        (范围值约束)
      。Predicate                              (断言)

          下面的语言指导介绍更详细的关于它们的消息
          Working Memory在匹配初始数据或修改数据后的时候根据LHS 的条件,把所有匹配的规则激活。一旦规则被激活放入Agenda 里就
   有可能会被按照执行顺序调用规则RHS的动作。LHS和RHS的关系就下面语句关系一样:
            
if ( <LHS> ){
     
<RHS>
}
       尽管“if”在像“if-else if...else”中是执行语句的一部分,规则使用“when”的语义确定规则是否被激活,则规则LHS被匹配。规则
   像    “package”一样关联到命名空间。其它的规则引擎叫这个叫规则集合(Rule Set)。命名空间(Package)可以声明imports其它Package,
   全局变 量, 函数和规则。
  
package com.sample

import java.util.List
import com.sample.Cheese

global List cheeses

function 
void exampleFunction(Cheese cheese) {
    System.out.println( cheese );
}


rule “A Cheesey Rule”
    when
        cheese : Cheese( type 
== "stilton" )
    then
        exampleFunction( cheese );
        cheeses.add( cheese );
end
      
      上面的例子使用一列单独的字符串变量约束的规则来匹配Cheese 。
rule "Cheddar Cheese"
    when
        Cheese( type 
== "cheddar" )
    then
        System.out.println( 
"cheddar" );
end
      这个例子和下面是相同的:
public void cheddarCheese(Cheese cheese) {
    
if ( cheese.getType().equals("cheddar"{
        System.out.println( 
"cheddar" );
    }

}
      规则引擎完全把业务规则和数据分离。改变Working Memory里的初始数据时候,规则不像方法和函数一样可以被直调用。规则引擎可以向java一样声明做什么而不是怎么做。


First Order Logic


只有注册用户登录后才能发表评论。


网站导航: