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

正文內(nèi)容

prolog概述(編輯修改稿)

2024-11-16 01:38 本頁面
 

【文章內(nèi)容簡介】 規(guī)則friend(john,X):likes(X,reading),likes(X,music).的頭部可與目標(biāo)謂詞匹配合一。但由于這個語句又是一個規(guī)則,所以其結(jié)論要成立則必須其前提全部成立。于是,對原目標(biāo)的求解就轉(zhuǎn)化為對新目標(biāo)likes(X,reading),likes(X,music).的求解。這實(shí)際是經(jīng)歸結(jié),規(guī)則頭部被消去,而目標(biāo)子句變?yōu)?likes(X,reading),likes(X,music).現(xiàn)在依次對子目標(biāo)likes(X,reading)和likes(X,music)求解。子目標(biāo)的求解過程與主目標(biāo)完全一樣,也是從頭對程序進(jìn)行掃描,不斷進(jìn)行測試和匹配合一等,直到匹配成功或掃描完整個程序?yàn)橹?。可以看出,對第一個子目標(biāo)like(X,reading)的求解因無可匹配的事實(shí)和規(guī)則而立即失敗,進(jìn)而導(dǎo)致規(guī)則friend(john,X):likes(X,reading),likes(X,music).的整體失敗。于是,剛才的子目標(biāo)likes(X,reading)和likes(X,music)被撤消,系統(tǒng)又回溯到原目標(biāo)friend(john,X)。這時,系統(tǒng)從該目標(biāo)剛才的匹配語句處(即第五句)向下繼續(xù)掃描程序中的子句,試圖重新使原目標(biāo)匹配,結(jié)果發(fā)現(xiàn)第六條語句的左部,即規(guī)則friend(john,X):likes(X,sports),likes(X,music).的頭部可與目標(biāo)為謂詞匹配。但由于這個語句又是一個規(guī)則,于是,這時對原目標(biāo)的求解,就又轉(zhuǎn)化為依次對子目標(biāo)likes(X,sports)和likes(X,music) 的求解。這次子目標(biāo)likes(X,sports)與程序中的事實(shí)立即匹配成功,且變量X被約束為bell。于是,系統(tǒng)便接著求解第二個子目標(biāo)。由于變量X已被約束,所以這時第二個子目標(biāo)實(shí)際上已變成了likes(bell,music).由于程序中不存在事實(shí)likes(bell,music),所以該目標(biāo)的求解失敗。于是,系統(tǒng)就放棄這個子目標(biāo),并使變量X恢復(fù)為自由變量,然后回溯到第一個子目標(biāo),重新對它進(jìn)行求解。由于系統(tǒng)已經(jīng)記住了剛才已同第一子目標(biāo)謂詞匹配過的事實(shí)的位置,所以重新求解時,便從下一個事實(shí)開始測試。易見,當(dāng)測試到程序中第三個事實(shí)時,第一個子目標(biāo)便求解成功,且變量X被約束為mary。這樣,第二個子目標(biāo)也就變成了likes(mary,music).再對它進(jìn)行求解。這次很快成功。由于兩個子目標(biāo)都求解成功,所以,原目標(biāo)friend(john,Y)也成功,且變量Y被約束為mary(由Y與X的合一關(guān)系)。于是,系統(tǒng)回答:Y=mary程序運(yùn)行結(jié)束。上面只給出了問題的一個解。如果需要和可能的話,系統(tǒng)還可把john的所有朋友都找出來。我們把上述程序的運(yùn)行過程再用示意圖(圖2─1)描述如下:圖2─1PROLOG程序運(yùn)行機(jī)理示例上述程序的運(yùn)行是一個通過推理實(shí)現(xiàn)的求值過程。我們也可以使它變?yōu)樽C明過程。例如,把上述程序中的詢問改為friend(john,mary)則系統(tǒng)會回答:yes若將詢問改為:riend(john,smith)則系統(tǒng)會回答:no從上述程序的運(yùn)行過程可以看出,PROLOG程序的執(zhí)行過程是一個(歸結(jié))演繹推理過程。其特點(diǎn)是:推理方式為反向推理,控制策略是深度優(yōu)先,且有回溯機(jī)制。其具體實(shí)現(xiàn)方法是:匹配子句的順序是自上而下;子目標(biāo)選擇順序是從左向右;(歸結(jié)后)產(chǎn)生的新子目標(biāo)總是插入被消去的目標(biāo)處(即目標(biāo)隊(duì)列的左部)。PROLOG的這種歸結(jié)演繹方法被稱為SLD(LinearresolutionwithSelectionfunctionforDefiniteclause)歸結(jié),或SLD反駁消解法。SLD歸結(jié)就是PROLOG程序的運(yùn)行機(jī)理,它也就是所謂的PROLOG語言的過程性語義。Turbo PROLOG程序設(shè)計(jì) Turbo PROLOG的程序結(jié)構(gòu)一個完整的Turbo PROLOG()程序一般包括常量段、領(lǐng)域段、數(shù)據(jù)庫段、謂詞段、目標(biāo)段和子句段等六個部分。各段以其相應(yīng)的關(guān)鍵字constants、domains、database、predicates、goal和clauses開頭加以標(biāo)識。:另外,在程序的首部還可以設(shè)置指示編譯程序執(zhí)行特定任務(wù)的編譯指令;在程序的任何位置都可設(shè)置注解??傊?,一個完整的TurboPROLOG()程序的結(jié)構(gòu)如下/**/constantsdomainsdatabasepredicatesgoalclauses當(dāng)然,一個程序不一定要包括上述所有段,但一個程序至少要有一個predicates段、clauses段和goal段。在大多數(shù)情形中,還需要一個domains段,以說明表、復(fù)合結(jié)構(gòu)及用戶自定義的域名。如若省略goal段,則可在程序運(yùn)行時臨時給出,但這僅當(dāng)在開發(fā)環(huán)境中運(yùn)行程序時方可給出。若要生成一個獨(dú)立的可執(zhí)行文件,則在程序中必須包含goal段。另一方面,一個程序也只能有一個goal段。 如果把上節(jié)中的程序要作為TurboPROLOG程序,則應(yīng)改寫為:/*例子程序1*/DOMAINSname=symbolPREDICATESlikes(name,name).friend(name,name)GOALfriend(john,Y),write(″Y=″,Y).CLAUSES likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):likes(X,sports),likes(X,music).friend(john,X):likes(X,reading),likes(X,music).結(jié)合上例,我們再對上述程序結(jié)構(gòu)中的幾個主要段的內(nèi)容和作用加以說明(其余段在后面用到時再作說明):領(lǐng)域段該段說明程序謂詞中所有參量項(xiàng)所屬的領(lǐng)域。領(lǐng)域的說明可能會出現(xiàn)多層說明,直到最終說明到Turbo PROLOG的標(biāo)準(zhǔn)領(lǐng)域?yàn)橹?如上例所示)。Turbo PROLOG的標(biāo)準(zhǔn)領(lǐng)域即標(biāo)準(zhǔn)數(shù)據(jù)類型,包括整數(shù)、實(shí)數(shù)、符號、串和符號等。 Turbo PROLOG的標(biāo)準(zhǔn)領(lǐng)域謂詞段:該段說明程序中用到的謂詞的名和參量項(xiàng)的名(但Turbo PROLOG的內(nèi)部謂詞無須說明)。子句段:該段是Turbo PROLOG程序的核心,程序中的所有事實(shí)和規(guī)則就放在這里,系統(tǒng)在試圖滿足程序的目標(biāo)時就對它們進(jìn)行操作。目標(biāo)段:該段是放置程序目標(biāo)的地方。目標(biāo)段可以只有一個目標(biāo)謂詞,例如上面的例子中就只有一個目標(biāo)謂詞;也可以含有多個目標(biāo)謂詞,如:goalreadint(X),Y=X+3,write(“Y=”,Y).就有三個目標(biāo)謂詞。這種目標(biāo)稱為復(fù)合目標(biāo)。另外,一般稱程序目標(biāo)段中的目標(biāo)為內(nèi)部目標(biāo),而稱在程序運(yùn)行時臨時給出的目標(biāo)為外部目標(biāo)。 Turbo PROLOG的數(shù)據(jù)與表達(dá)式 1)標(biāo)準(zhǔn)領(lǐng)域Turbo PROLOG中不定義變量的類型,只說明謂詞中各個項(xiàng)的取值域。2)結(jié)構(gòu)結(jié)構(gòu)也稱復(fù)合對象,它是TurboPROLOG謂詞中的一種特殊的參量項(xiàng)(類似于謂詞邏輯中的函數(shù))。結(jié)構(gòu)的一般形式為()其中函子及參量的標(biāo)識符與謂詞相同。注意,這意味著結(jié)構(gòu)中還可包含結(jié)構(gòu)。所以,復(fù)合對象可表達(dá)樹形數(shù)據(jù)結(jié)構(gòu)。例如下面的謂詞likes(Tom,sports(football,basketball,tabletennis)).中的sports(football,basketball,tabletennis)就是一個結(jié)構(gòu),即復(fù)合對象。又如:person(“張華”,student(“西安石油學(xué)院”),address(“中國”,“陜西”,“西安”)).reading(“王宏”,book(“人工智能技術(shù)基礎(chǔ)教程”,“西安電子科技大學(xué)出版社”)).friend(father(“Li”),father(“Zhao”)).這幾個謂詞中都有復(fù)合對象。復(fù)合對象在程序中的說明,需分層進(jìn)行。例如,對于上面的謂詞likes(Tom,sports(football,basketball,tabletennis)).在程序中可說明如下:domainsname=symbolsy=symbolsp=sports(sy,sy,sy)predicateslikes(name,sp)3)表表的一般形式是[x1,x2,…,xn]其中xi(i=1,2,…,n)為PROLOG的項(xiàng),一般要求同一個表的元素必須屬于同一領(lǐng)域。不含任何元素的表稱為空表,記為[]。例如下面就是一些合法的表。[1,2,3][apple,orange,banana,grape,cane][“PROLOG”,“MAENS”,“PROGRAMMING”,“in logic”] [[a,b],[c,d],[e]] []表的最大特點(diǎn)是其元素個數(shù)可在程序運(yùn)行期間動態(tài)變化。表的元素也可以是結(jié)構(gòu)或表,且這時其元素可以屬于不同領(lǐng)域。例如:name(“Li Ming”),age(20),sex(male),address(xi an)] [[1,2],[3,4,5],[6,7]]都是合法的表。后一個例子說明,表也可以嵌套。實(shí)際上,表是一種特殊的結(jié)構(gòu)。它是遞歸結(jié)構(gòu)的另一種表達(dá)形式。這個結(jié)構(gòu)的函數(shù)名取決于具體的PROLOG版本。這里我們就用一個圓點(diǎn)來表示。下面就是一些這樣的結(jié)構(gòu)及它們的表表示形式:結(jié)構(gòu)形式表形式 (a,[])[a] (a,(b,[]))[a,b] (a,(b,(c,[])))[a,b,c]表的說明方法是在其組成元素的說明符后加一個星號*。如:domainslists=string*predicatespl(lists)就說明謂詞pl中的項(xiàng)lists是一個由串string組成的表。對于由結(jié)構(gòu)組成的表,至少得分三步說明。例如對于下面謂詞p中的表p([name(“Liming”),age(20)])則需這樣說明:domainsrec=seg*seg=name(string)。age(integer)predicatesp(rec)由上面的領(lǐng)域可知,Turbo PROLOG的常量有整數(shù)、實(shí)數(shù)、字符、串、符號、結(jié)構(gòu)、表和文件這八種數(shù)據(jù)類型。同理,Turbo PROLOG的變量也就有這八種取值。另外,變量名要求必須是以大寫字母或下劃線開頭的字母、數(shù)字和下劃線序列,或者只有一個下劃線。這后一種變量稱為無名變量。Turbo PROLOG提供了五種最基本的算術(shù)運(yùn)算:加、減、乘、除和取模,相應(yīng)運(yùn)算符號為+、*、/、mod。這五種運(yùn)算的順序?yàn)椋?、/、mod優(yōu)先于+、。同級從左到右按順序運(yùn)算,括號優(yōu)先。算術(shù)表達(dá)式的形式與數(shù)學(xué)中的形式基本一樣。例如:數(shù)學(xué)中的算術(shù)表達(dá)式PROLOG中的算術(shù)表達(dá)式x+yzX+Y*Zabc/dA*BC/Du mod vU mod V(表示求U除以V所得的余數(shù))即是說,Turbo PROLOG中算術(shù)表達(dá)式采用通常數(shù)學(xué)中使用的中綴形式。這種算術(shù)表達(dá)式為PROLOG的一種異體結(jié)構(gòu),若以PROLOG的結(jié)構(gòu)形式來表示,則它們應(yīng)為+(X,*(Y,Z))(*(A,B),/(C,D))mod(U,V)所以,運(yùn)算符+、*、/和mod實(shí)際也就是PROLOG內(nèi)部定義好了的函數(shù)符。在Turbo PROLOG程序中,如果一個算術(shù)表達(dá)式中的變元全部被實(shí)例化(即被約束)的話,則這個算術(shù)表達(dá)式的值就會被求出。求出的值可用來實(shí)例化某變量,也可用來同其他數(shù)量進(jìn)行比較,用一個算術(shù)表達(dá)式的值實(shí)例化一個變量的方法是用謂詞“is”或“=”來實(shí)現(xiàn)。例如:Y is X+5 或 Y=X+5(*)就使變量Y實(shí)例化為X+5的值(當(dāng)然X也必須經(jīng)已被某值實(shí)例化),可以看出,這里對變量Y的實(shí)例化方法類似于其他高級程序語言中的“賦值”,但又不同于賦值。例如,在PROLOG中下面的式子是錯誤的:X=X+1 Turbo PROLOG提供了六種常用的關(guān)系運(yùn)算,即小于、小于或等于、等于、大于、大于或等于和不等于,其運(yùn)算符依次為,=,Turbo PROLOG的關(guān)系表達(dá)式的形式和數(shù)學(xué)中的也基本一樣,例如:數(shù)學(xué)中的關(guān)系式Turbo PROLOG中的關(guān)系式X+1≥YX+1=YX≠YXY 即是說,Turbo PROLOG中的關(guān)系式也用中綴形式。當(dāng)然,這種關(guān)系式為Turbo PROLOG中的異體原子。若按Turbo PROLOG中的原子形式來表示,則上面的兩個例子為=(X+1,Y)和(X,Y)所以上述六種關(guān)系運(yùn)算符,實(shí)際上也就是Turbo PROLOG內(nèi)部定義好了的六個謂詞。這六個關(guān)系運(yùn)算符可用來比較兩個算術(shù)表達(dá)式的大小。例如:brother(Name1,Name2):person(Name1,man,Age1),person(Name2,man,Age2),mother(Z,Name1),mother(Z,Name2),Age1,“=”的用法比較特殊,它既可以表示比較,也可以表示約束值,即使在同一個規(guī)則中的同一個“=”也是如此。例如:(例一)p(X,Y,Z):Z=X+、Y、Z全部被實(shí)例化時,“=”就是比較符。如:對于問題Goal:p(3,5,8).機(jī)器回答:yes。而對于Goal:p(3,5,7).機(jī)器回答:no。即這時機(jī)器把X+Y的值,與Z的值進(jìn)行比較。(例二)但當(dāng)X,Y被實(shí)例化,為Z未被實(shí)例化時,“=”號就是約束符。如:Goal:p(3,5,Z).機(jī)器回答:Z=8 這時,機(jī)器使Z實(shí)例化為X+Y的結(jié)果。 輸入與輸出雖然PROLOG能自動輸出目標(biāo)子句中的變量的值,但這種輸出功能必定有限,往往不能滿足實(shí)際需要;另一方面,對通常大多數(shù)的程序來說,運(yùn)行時從鍵盤上輸入有關(guān)數(shù)據(jù)或信息也是必不可少的。為此每種具體PROLOG一般都提供專門的輸入和輸出謂詞,供用戶直接調(diào)用。例如,下面就是TorboPROLOG的幾種輸入輸出謂詞:(1)readln(X
點(diǎn)擊復(fù)制文檔內(nèi)容
數(shù)學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1