drools使用手册第三章内容摘要:
,默认就是 and。 注意在‘ and’前面不能有一个如‘ or’这样的声明绑定,想一下你很容易明白。 一个声明只能涉及到一个单独的 Fact, 当 and被满足时,它匹配超过一个 fact,哪一个 Fact 是声明所绑定的呢。 [译者注:这里的翻译有些难懂,估计的意思是如果将 and和 or平级混用,这将引起逻辑上的混乱,因此不能这样。 ] . 39。 and39。 图 . and 有效的子条件元素 (用括号进行组合 ): and, or, not, exists, column 例 . Column Cheese( cheeseType : type ) amp。 amp。 Person( favouriteCheese == cheeseType ) Cheese( cheeseType : type ) and Person( favouriteCheese == cheeseType ) . 39。 or39。 图 . or 有效的子条件元素 : and, or, not, exists, column 例 . or Person( sex == f, age 60 ) || Person( sex == m, age 65 ) Person( sex == f, age 60 ) or Person( sex == m, age 65 ) 图 . or 例 . or with binding pensioner : ( Person( sex == f, age 60 ) or Person( sex == m, age 65 ) ) Or条件元素在多个规则(称为子规则)中对每一个可能的逻辑输出产生结果。 上面的示例将在两个规则中产生结果。 这两个规则在 Working Memory 中独立的工作,这意味着每一个都能够匹配、激活和执行,没有捷径。 OR的最好的使用方式是作为产生两个额外规则的捷径。 如果你这样想,很明显对于一个规则能有多个行为,如果 Or 条件元素的两边都满足的话。 . 39。 eval39。 图 . eval 有效的子条件元素 : none Eval 本质上是一个允许任何语义代码(代码返回原型 boolean)被执行的调用。 它可以用来查阅在规则的 LHS 中绑定的变量。 在一个规则的 LHS 中, eval 必须被放在最后。 你可以在规则中有多个 evanl ,通常你需 要使用一些列约束将他们组合起来。 Eval 不能被索引,这不是使用值约束的最佳方式。 但是当函数的返回值不断改变时(这样的函数不能用在值约束中),使用 eval 非常合适。 如果规则中的其它条件是匹配的, eval 仍然需要每次都重新检查。 对于那些熟悉 Drools 版本的人,旧的 Drools 参数和条件标记等于将一个变量绑定到适当的类型上,然后作为一个 eval 节点使用。 例 . eval p1 : Parameter() p2 : Parameter() eval( ().containsKey(()) ) eval( isValid(p1, p2) ) // 这是如何在 LHS 中进行函数 isValid 调用的方法 . 39。 not39。 图 . not 有效的子条件元素 : Column 39。 not39。 是一阶逻辑的存在判断量词,检查在 Working Memory 中某些 Fact 的存在性。 当前只有 Column 可以在 not 中嵌套,以后将可以支持 and 和 or 进行嵌套(已在 中实现)。 例 . No Busses not Bus() 例 . No red Busses not Bus(color == red) not ( Bus(color == red, number == 42) ) //not 后的括号可选 . 39。 exists39。 存在 图 . exists 有效的子条件元素 : Column 39。 exists39。 是一阶逻辑的存在判断量词,检查在 Working Memory 中某些 Fact 的存在性。 存在的意思是至少有一个。 它不同于只检查 Column 自身的清况。 如果只是要求 Column,则意味着对每一个符 合的 Column。 如果使用 exists 对 Column,则规则仅仅激活一次,而不会考虑 Working Memory中有多少个 Column符合条件。 当前只有 Column 可以在 exists 中嵌套,以后将可以支持 and 和 or 进行嵌套(已在 中实现)。 例 . Atleast one Bus exists Bus() 例 . Atleast one red Bus exists Bus(color == red) . 39。 group39。 图 . group 括号在这里与数学中使用的模式类似,它使得操作的顺序更清晰。 例 . Example of groups ... ( Message( status == ) and Message(message != null) or Message(status == null) ) ... 例 . A rule example rule Approve if not rejected salience 100 agendagroup approval when not Rejection() p : Policy(approved == false, policyState:status) exists Driver(age 25) Process(status == policyState) then log(APPROVED: due to no objections.)。 (true)。 end . 对原型数据自动封箱的提醒 Java 5 支持对原型进行类型适当的自动封箱和拆箱。 这使得代码的阅读方便简捷。 但是 Drools 也支持在 中运行,我们不能依赖于这点( 之后版本不用考虑本节所述问题 )。 在需要的时候 Drools 不得不进行封箱操作。 被查阅的 Field 会自动封箱到对应的对象类型(如 intInteger) ,如果本身已经是对象则不会改变。 但是要注意的是它们不会被自动拆箱。 这样的话,如果你绑定了 field 在一个 int 原型数值上,它的行为在规则中看起来像对象一样 (如断言、返回值约束和 RHS)。 作为一个约定,如果可能的话将你的 fields 换成对象类型(至少直到 java5),或者最少将你的 fields 想象为对象类型,即使它们开始不是。 另一个要注意的是返回值约束,返回值片断必须返回一个对象而不是原型。 现在我期望你可以在Java5 以上版本开发。 因为之前的 java 不是所有都是对象才造成这个头痛的问题。 . Query 查询 图 . query 查询中仅仅包含规则 LHS 部分的结构(不用指定 when 或 then)。 它提供了查询working memory 中符合约束条件的对象的一个简单办法。 要获得查询结果,使用 (name),” name”就是指 query 的名称。 查询名称对于 RuleBase 来说是全局性的,因此在为一个RuleBase 服务的不同 Package 中不要使用重复的查询名称。 下例为所有 30 岁以上的人建立了一个简单的查询。 例 . Query People over the age of 30 query people over the age of 30 person : Person( age 30 ) end 通过在返回的查询结果 (QueryResults)上进行标准的 for 循环遍历,每一行将返回一个 QueryResult,该对象可以用来存取组元中的每一个 Column。 这些 Column可以通过声明的名称或索引位置存取。 例 . Query People over the age of 30 QueryResults results = ( people over the age of 30 )。 ( we have + () + people over the age of 30 )。 ( These people are are over 30: )。 for ( Iterator it =。 ()。 ) { QueryResult result = ( QueryResult ) ()。 Person person = ( Person ) ( person )。 ( () + \n )。 } . Domain Specific Languages 领域语言 如之前介绍, DSL是将规则语言扩展到你自己的问题领域中的办法。 DSL 将规则语言制于你的控制之下,并且可以使用所有规则语言和引擎的 特性。 . 何时使用 DSL DSL 可以用作分离规则编辑(规则的作者)和在规则引擎中操作的对象的一个中间层。 DSL 也可以作为条件或行为的模板,使你可以在规则中重复使用,有时候可能仅仅是用来改变参数。 如果你需要规则能够被非技术人员阅读和使用,如商业分析师, DSL 正好合适。 如果你的规则的条件或推论遵循相似的模式,可以用模板的方式表达;当你希望隐藏实现的细节,而将焦点放在商业规则上时;或者你希望通过提供预定义的模版来控制规则的修改;这些都适合使用 DSL。 DSL 不关注规则的运行时,它们仅仅是分解和编译时需 要的特性。 注意 Drools3 的 DSL 与 Drools 2 基于 XML 的 DSL 很不相同。 XML风格也仍然被支持的,如果你需要的话,可以查看 Drools3 的 Xml 规则语言,并考虑使用 XSLT将 Drools2 中的 XML 映射为 Drools3 XML 语言。 . 修改与管理 DSL DSL 配置是保存在无格式文本文件中。 如果你使用 IDE,你可以获得一个友好的图形编辑器(以及一些校验),但保存文件的格式十分简单。 例 . Example mapping [when]This is {something}=Something(something=={something}) 参考上面的示例, [when]指明了表达式所使用的范围,是属于 LHS或 RHS。 在 [when]之后是要用在规则之内的表达式(通常是自然语言表达式,但不是必需的)。 在‘ =’符号右边的部分是将要映射到的规则语言(当然这个结构依赖于你要用在LHS 还是 RHS上,如果是 LHS,则它是 LSH 的语法,如果是 RHS,则它是 java 代码的片断)。 分解器将获得你指定的表达式,然后取出输入中的 {something}(称为 Tokens)值进行匹配。 与 tokens 匹配的 值获得后将替换等式右边的同名处,所得到的目标表达式是规则引擎实际使用的。 要特别注意的是 DSL 表达式一次处理一行。 这意味着在上面的例子中,所有在”There is”后面直到行未的文本将会被认为是 {something}的值,作为替换目标的实际值。 这样的效果可能不是当你想将不同的 DSL 扩展链接在一起产生一个目标表达式时想要的。 作为绕过这个规则的最好方法是确认 [tokens]使用字符或标点括上。 这意味着分析器沿着句子检查,并将字符之间(在这里是双引号)的值取出。 注意围绕的字符(双引号)在进行内部替代时不会被包含进 去,只有中间的内容被使用(而随后到行尾的内容,将被视为 Case 中的其它情况)。 [译者注:这里的内容直译不易理解,最好参看后面的例子 理解; ] 作为一个惯例,对文本数据使用引号是规则编辑器所默认的。 你也可以在 {tokens}外加上引号以确认你想捕捉的数据。 例 . 引号示例 [when]This is {something} and {an。drools使用手册第三章
相关推荐
立 (携带同一信息 )的信号进行特定的处理,以降低信号电平起伏的方法。 分集接收有两重含义:一是分散传输,使接收端能获得多个统计独立的、携带同一信息的衰落信号;二是集中处理,即接收机把收到的多个统计独立的衰落信号进行合并以降低衰落的影响。 分集技术利用多条传输相同信息且具有近似相等的平均信号强度和相互独立衰落特性的信号路径,并在接收端对这些信号进行适当的合并,以便大大降低多径衰落的影响
8点基 2 DIF FFT蝶形运算 从图 (b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为)7(),3(),5(),1(),6(),2(),4(),0( xxxxxxxx。 输出是按自然顺序排列,其顺序为 )7(),6(,),1(),0( xxxx 。 五 总体方案设计: ( 1) 在 CCS 中建立一个工程文件 project\new\FFT,往工程文件里添加程序
公式是 Tx_adjust=76dB+Tx_power+Rx_power。 TXADJ反映了手机当前所在地的上行链路质量和下行链路质量的一个比较情况。 我们知道,正常情况下,手机离基站近,手机的发射功率就会减小,而接收功率就会变大,而手机离基 站远,手机的发射功率就会增大,而接收功率就会变小。 所以,正常情况下,发射功率和接收功率再加上一个常数修正值,其结果应该在一个小的区间内 (比如说-
echo] [echo] manual generates the docbook documentation in [echo] html and single_html format at target/docs [echo] [echo] distall generates the distribution builds for [echo] src, bin, binwithdeps
DP 型烧结多孔砖砌体结构房屋中,圈梁、过梁、墙梁和挑梁的设置、计算和构造要求, 均应符合现行国家标准 《砌体结构设计规范》 GB50003 的有关规定。 9 6 抗 震 设 计 一 般 规 定 抗震设防地区的 DP 型烧结多孔砖砌体承重的多层房屋, 应按本章规定进行抗震设计,除应符合本规程规定外,尚应 符合现行国家标准《建筑抗震设计规范》 GB5001《砌体结构设计规范》
外贸业务部/采购部进口来料发票外经贸委备案海关备案进口货物到港通知单进口发票进口货物到港情况汇总面辅料供应管 理 流程面辅料库存管理流程备案费用登录 进出口费用汇总表报关费用登录 进出口费用汇总表银行费用登录 进出口费用汇总表流程说明:外贸业务部和采购部根据面辅料提供的来源,决定对面辅料是否备案: 如果是国内提供(包括国内采购和国内来料)面辅料