freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

drools使用手冊(cè)第三章(編輯修改稿)

2024-12-20 04:41 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ,默認(rèn)就是 and。注意在‘ and’前面不能有一個(gè)如‘ or’這樣的聲明綁定,想一下你很容易明白。一個(gè)聲明只能涉及到一個(gè)單獨(dú)的 Fact, 當(dāng) and被滿足時(shí),它匹配超過(guò)一個(gè) fact,哪一個(gè) Fact 是聲明所綁定的呢? [譯者注:這里的翻譯有些難懂,估計(jì)的意思是如果將 and和 or平級(jí)混用,這將引起邏輯上的混亂,因此不能這樣。 ] . 39。and39。 圖 . and 有效的子條件元素 (用括號(hào)進(jìn)行組合 ): 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條件元素在多個(gè)規(guī)則(稱為子規(guī)則)中對(duì)每一個(gè)可能的邏輯輸出產(chǎn)生結(jié)果。上面的示例將在兩個(gè)規(guī)則中產(chǎn)生結(jié)果。這兩個(gè)規(guī)則在 Working Memory 中獨(dú)立的工作,這意味著每一個(gè)都能夠匹配、激活和執(zhí)行,沒(méi)有捷徑。 OR的最好的使用方式是作為產(chǎn)生兩個(gè)額外規(guī)則的捷徑。如果你這樣想,很明顯對(duì)于一個(gè)規(guī)則能有多個(gè)行為,如果 Or 條件元素的兩邊都滿足的話。 . 39。eval39。 圖 . eval 有效的子條件元素 : none Eval 本質(zhì)上是一個(gè)允許任何語(yǔ)義代碼(代碼返回原型 boolean)被執(zhí)行的調(diào)用。它可以用來(lái)查閱在規(guī)則的 LHS 中綁定的變量。在一個(gè)規(guī)則的 LHS 中, eval 必須被放在最后。你可以在規(guī)則中有多個(gè) evanl ,通常你需 要使用一些列約束將他們組合起來(lái)。 Eval 不能被索引,這不是使用值約束的最佳方式。但是當(dāng)函數(shù)的返回值不斷改變時(shí)(這樣的函數(shù)不能用在值約束中),使用 eval 非常合適。如果規(guī)則中的其它條件是匹配的, eval 仍然需要每次都重新檢查。 對(duì)于那些熟悉 Drools 版本的人,舊的 Drools 參數(shù)和條件標(biāo)記等于將一個(gè)變量綁定到適當(dāng)?shù)念愋蜕希缓笞鳛橐粋€(gè) eval 節(jié)點(diǎn)使用。 例 . eval p1 : Parameter() p2 : Parameter() eval( ().containsKey(()) ) eval( isValid(p1, p2) ) // 這是如何在 LHS 中進(jìn)行函數(shù) isValid 調(diào)用的方法 . 39。not39。 圖 . not 有效的子條件元素 : Column 39。not39。是一階邏輯的存在判斷量詞,檢查在 Working Memory 中某些 Fact 的存在性。當(dāng)前只有 Column 可以在 not 中嵌套,以后將可以支持 and 和 or 進(jìn)行嵌套(已在 中實(shí)現(xiàn))。 例 . No Busses not Bus() 例 . No red Busses not Bus(color == red) not ( Bus(color == red, number == 42) ) //not 后的括號(hào)可選 . 39。exists39。 存在 圖 . exists 有效的子條件元素 : Column 39。exists39。是一階邏輯的存在判斷量詞,檢查在 Working Memory 中某些 Fact 的存在性。存在的意思是至少有一個(gè)。它不同于只檢查 Column 自身的清況。如果只是要求 Column,則意味著對(duì)每一個(gè)符 合的 Column。如果使用 exists 對(duì) Column,則規(guī)則僅僅激活一次,而不會(huì)考慮 Working Memory中有多少個(gè) Column符合條件。 當(dāng)前只有 Column 可以在 exists 中嵌套,以后將可以支持 and 和 or 進(jìn)行嵌套(已在 中實(shí)現(xiàn))。 例 . Atleast one Bus exists Bus() 例 . Atleast one red Bus exists Bus(color == red) . 39。group39。 圖 . group 括號(hào)在這里與數(shù)學(xué)中使用的模式類似,它使得操作的順序更清晰。 例 . 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 . 對(duì)原型數(shù)據(jù)自動(dòng)封箱的提醒 Java 5 支持對(duì)原型進(jìn)行類型適當(dāng)?shù)淖詣?dòng)封箱和拆箱。這使得代碼的閱讀方便簡(jiǎn)捷。但是 Drools 也支持在 中運(yùn)行,我們不能依賴于這點(diǎn)( 之后版本不用考慮本節(jié)所述問(wèn)題 )。在需要的時(shí)候 Drools 不得不進(jìn)行封箱操作。被查閱的 Field 會(huì)自動(dòng)封箱到對(duì)應(yīng)的對(duì)象類型(如 intInteger) ,如果本身已經(jīng)是對(duì)象則不會(huì)改變。但是要注意的是它們不會(huì)被自動(dòng)拆箱。這樣的話,如果你綁定了 field 在一個(gè) int 原型數(shù)值上,它的行為在規(guī)則中看起來(lái)像對(duì)象一樣 (如斷言、返回值約束和 RHS)。 作為一個(gè)約定,如果可能的話將你的 fields 換成對(duì)象類型(至少直到 java5),或者最少將你的 fields 想象為對(duì)象類型,即使它們開始不是。另一個(gè)要注意的是返回值約束,返回值片斷必須返回一個(gè)對(duì)象而不是原型?,F(xiàn)在我期望你可以在Java5 以上版本開發(fā)。因?yàn)橹暗?java 不是所有都是對(duì)象才造成這個(gè)頭痛的問(wèn)題。 . Query 查詢 圖 . query 查詢中僅僅包含規(guī)則 LHS 部分的結(jié)構(gòu)(不用指定 when 或 then)。它提供了查詢working memory 中符合約束條件的對(duì)象的一個(gè)簡(jiǎn)單辦法。 要獲得查詢結(jié)果,使用 (name),” name”就是指 query 的名稱。查詢名稱對(duì)于 RuleBase 來(lái)說(shuō)是全局性的,因此在為一個(gè)RuleBase 服務(wù)的不同 Package 中不要使用重復(fù)的查詢名稱。 下例為所有 30 歲以上的人建立了一個(gè)簡(jiǎn)單的查詢。 例 . Query People over the age of 30 query people over the age of 30 person : Person( age 30 ) end 通過(guò)在返回的查詢結(jié)果 (QueryResults)上進(jìn)行標(biāo)準(zhǔn)的 for 循環(huán)遍歷,每一行將返回一個(gè) QueryResult,該對(duì)象可以用來(lái)存取組元中的每一個(gè) Column。這些 Column可以通過(guò)聲明的名稱或索引位置存取。 例 . 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 領(lǐng)域語(yǔ)言 如之前介紹, DSL是將規(guī)則語(yǔ)言擴(kuò)展到你自己的問(wèn)題領(lǐng)域中的辦法。 DSL 將規(guī)則語(yǔ)言制于你的控制之下,并且可以使用所有規(guī)則語(yǔ)言和引擎的 特性。 . 何時(shí)使用 DSL DSL 可以用作分離規(guī)則編輯(規(guī)則的作者)和在規(guī)則引擎中操作的對(duì)象的一個(gè)中間層。 DSL 也可以作為條件或行為的模板,使你可以在規(guī)則中重復(fù)使用,有時(shí)候可能僅僅是用來(lái)改變參數(shù)。如果你需要規(guī)則能夠被非技術(shù)人員閱讀和使用,如商業(yè)分析師, DSL 正好合適。如果你的規(guī)則的條件或推論遵循相似的模式,可以用模板的方式表達(dá);當(dāng)你希望隱藏實(shí)現(xiàn)的細(xì)節(jié),而將焦點(diǎn)放在商業(yè)規(guī)則上時(shí);或者你希望通過(guò)提供預(yù)定義的模版來(lái)控制規(guī)則的修改;這些都適合使用 DSL。 DSL 不關(guān)注規(guī)則的運(yùn)行時(shí),它們僅僅是分解和編譯時(shí)需 要的特性。 注意 Drools3 的 DSL 與 Drools 2 基于 XML 的 DSL 很不相同。 XML風(fēng)格也仍然被支持的,如果你需要的話,可以查看 Drools3 的 Xml 規(guī)則語(yǔ)言,并考慮使用 XSLT將 Drools2 中的 XML 映射為 Drools3 XML 語(yǔ)言。 . 修改與管理 DSL DSL 配置是保存在無(wú)格式文本文件中。如果你使用 IDE,你可以獲得一個(gè)友好的圖形編輯器(以及一些校驗(yàn)),但保存文件的格式十分簡(jiǎn)單。 例 . Example mapping [when]This is {something}=Something(something=={something}) 參考上面的示例, [when]指明了表達(dá)式所使用的范圍,是屬于 LHS或 RHS。在 [when]之后是要用在規(guī)則之內(nèi)的表達(dá)式(通常是自然語(yǔ)言表達(dá)式,但不是必需的)。在‘ =’符號(hào)右邊的部分是將要映射到的規(guī)則語(yǔ)言(當(dāng)然這個(gè)結(jié)構(gòu)依賴于你要用在LHS 還是 RHS上,如果是 LHS,則它是 LSH 的語(yǔ)法,如果是 RHS,則它是 java 代碼的片斷)。 分解器將獲得你指定的表達(dá)式,然后取出輸入中的 {something}(稱為 Tokens)值進(jìn)行匹配。與 tokens 匹配的 值獲得后將替換等式右邊的同名處,所得到的目標(biāo)表達(dá)式是規(guī)則引擎實(shí)際使用的。 要特別注意的是 DSL 表達(dá)式一次處理一行。這意味著在上面的例子中,所有在”There is”后面直到行未的文本將會(huì)被認(rèn)為是 {something}的值,作為替換目標(biāo)的實(shí)際值。這樣的效果可能不是當(dāng)你想將不同的 DSL 擴(kuò)展鏈接在一起產(chǎn)生一個(gè)目標(biāo)表達(dá)式時(shí)想要的。作為繞過(guò)這個(gè)規(guī)則的最好方法是確認(rèn) [tokens]使用字符或標(biāo)點(diǎn)括上。這意味著分析器沿著句子檢查,并將字符之間(在這里是雙引號(hào))的值取出。注意圍繞的字符(雙引號(hào))在進(jìn)行內(nèi)部替代時(shí)不會(huì)被包含進(jìn) 去,只有中間的內(nèi)容被使用(而隨后到行尾的內(nèi)容,將被視為 Case 中的其它情況)。 [譯者注:這里的內(nèi)容直譯不易理解,最好參看后面的例子 理解; ] 作為一個(gè)慣例,對(duì)文本數(shù)據(jù)使用引號(hào)是規(guī)則編輯器所默認(rèn)的。你也可以在 {tokens}外加上引號(hào)以確認(rèn)你想捕捉的數(shù)據(jù)。 例 . 引號(hào)示例 [when]This is {something} and {an
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1