




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第2章 邏輯程序設計語言PROLOG 2.1 基本PROLOG 2.2 Turbo PROLOG程序設計 2.1 基本PROLOG 2.1.1 PROLOG的語句 1. 1. 事實事實(fact)(fact) 格式 謂詞名(項表). student(john). like(mary,music). abc. repeat. 功能 一般表示對象的性質或關系。 2. 2. 規則規則(rule)(rule) 格式 謂詞名(項表):-謂詞名(項表),謂詞名(項表). bird(X):-animal(X),has(X,feather). grandfather(X,Y):- father(X,Z),f
2、ather(Z,Y). run:-start,step1(X),step2(X),end. 功能 一般表示對象間的因果關系、蘊含關系或對應關系。 3. 問題(question) 格式?-謂詞名(項表),謂詞名(項表). ?-student(john). ?-like(mary,X). 功能問題表示用戶的詢問, 它就是程序運行的目標。 2.1.2 PROLOG的程序 PROLOG程序一般由一組事實、 規則和問題組成。問題是程序執行的起點, 稱為程序的目標。 likes(bell,sports). likes(mary,music). likes(mary,sports). likes(jane,
3、smith). friend(john,X):-likes(X,reading),likes(X,music). friend(john,X):-likes(X,sports),likes(X,music). ?-friend(john,Y). ?-likes(mary,X).或 ?-likes(mary,music).或 ?-friend(X,Y).或 ?-likes(bell,sports), likes(mary,music), friend(john,X).2.1.3 PROLOG程序的運行機理 1. 1. 自由變量與約束變量自由變量與約束變量 2. 2. 匹配合一匹配合一 兩個謂詞可
4、匹配合一, 是指兩個謂詞的名相同, 參量項的個數相同, 參量類型對應相同, 并且對應參量項還滿足下列條件之一: (1) 如果兩個都是常量, 則必須完全相同。 (2) 如果兩個都是約束變量, 則兩個約束值必須相同。 (3) 如果其中一個是常量, 一個是約束變量, 則約束值與常量必須相同。 (4) 至少有一個是自由變量。 考慮下面的各組謂詞是否可匹配合一? pre1(ob1,ob2,Z) pre1(ob1, ob3,Y) pre1(ob1,ob2,Z) pre1(ob1,X, ob3) pre1(ob1,ob2,Z) pre1(ob1,X,Y)3. 3. 回溯回溯 所謂回溯, 就是在程序運行期間,
5、 當某一個子目標不能滿足(即謂詞匹配失敗)時,控制就返回到前一個已經滿足的子目標(如果存在的話), 并撤消其有關變量的約束值, 然后再使其重新滿足。 成功后, 再繼續滿足原子目標。如果失敗的子目標前再無子目標, 則控制就返回到該子目標的上一級目標(即該子目標謂詞所在規則的頭部)使它重新匹配。回溯也是PROLOG的一個重要機制。 likes(bell,sports). likes(mary,music). likes(mary,sports). likes(jane,smith). friend(john,X):-likes(X,reading),likes(X,music). friend(j
6、ohn,X):-likes(X,sports),likes(X,music). ?-friend(john,Y).則求解目標為 friend(john,Y). 新目標 likes(X,reading),likes(X,music). 2.2 Turbo PROLOG程序設計2.2.1 程序結構 /* 注 釋 */ 編譯指令 constants 常量說明 domains 域說明 database 數據庫說明 predicates 謂詞說明 goal 目標語句 clauses 子句集 例例 如果把上節的例子程序作為Turbo PROLOG程序, 則應改寫為: DOMAINS name=symbol
7、 PREDICATES likes(name,name). friend(name,name) GOAL friend(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). 領域段該段說明程序謂詞中所有參量項所屬的領域。 Turbo PROL
8、OG的標準領域包括整數、實數、符號、串和符號等, 其具體說明如下表所示。謂詞段 該段說明程序中用到的謂詞的名和參量項的名(但Turbo PROLOG 的內部謂詞無須說明)子句段 該段是Turbo PROLOG程序的核心, 程序中的所有事實和規則就放在這里, 系統在試圖滿足程序的目標時就對它們進行操作。 目標段 該段是放置程序目標的地方。 目標段可以只有一個目標謂詞, 例如上面的例子中就只有一個目標謂詞; 也可以含有多個目標謂詞, 如 goal readint(X),Y=X+3,write(Y=,Y).就有三個目標謂詞。 這種目標稱為復合目標。 2.2.2 數據與表達式1. 1. 領域領域 1)
9、 標準領域 整數、實數、 字符、 串和符號 2) 結構 結構也稱復合對象, 一般形式為 函子(參量表)likes(Tom, sports(football, basketball, table_tennis).reading(王宏,book(人工智能技術導論,西安電子科技大學出版社). friend(father(Li), father(Zhao). 復合對象在程序中的說明, 需分層進行。 例如, 對于上面的謂詞 likes(Tom, sports(football, basketball, table_tennis). 在程序中可說明如下: domains name=symbol sy=sy
10、mbol sp=sports(sy, sy, sy) predicates likes(name, sp) 3) 表 表的一般形式 x1, x2, , xn 其中xi(i=1, 2, , n)為PROLOG的項, 一般要求同一個表的元素必須屬于同一領域。不含任何元素的表稱為空表, 記為 。 1, 2, 3 apple, orange, banana, grape, cane PROLOG,PROGRAMMING,in logic a, b, c, d, e name(LiMing), age(20),sex(male),addr(xian)表的說明方法是在其組成元素的說明符后加一個星號*。 如
11、: domains lists=string* predicates pl(lists)例如,謂詞 p(name(Liming), age(20)則需這樣說明: domains rec=seg* seg=name(string);age(integer) predicates p(rec) 2. 2. 常量與變量常量與變量 Turbo PROLOG的常量有整數、實數、 字符、串、符號、結構、表和文件這八種數據類型。同理, Turbo PROLOG的變量也就有這八種取值。另外, 變量名要求必須是以大寫字母或下劃線開頭的字母、數字和下劃線序列, 或者只有一個下劃線。 這后一種變量稱為無名變量。 3
12、. 3. 算術表達式算術表達式 Turbo PROLOG提供了五種最基本的算術運算:加、減、 乘、除和取模, 相應運算符號為+、 -、*、 /、 mod。 這五種運算的順序為: *、/、 mod優先于+、 -。 數學中的算術表達式 PROLOG中的算術表達式 x+yz X+Y*Z ab-c/d A*B-C/D u mod v U mod V Y=X+5 X=X+1 4.4.關系表達式關系表達式 Turbo PROLOG提供了六種常用的關系運算, 即小于、 小于或等于、等于、大于、大于或等于和不等于, 其運算符依次為 , , =, 數學中的關系式 Turbo PROLOG中的關系式 X+1Y X
13、+1=Y XY XY brother(Name1, Name2):- person(Name1, man, Age1), person(Name2, man, Age2), mother(Z, Name1), mother(Z, Name2), Age1Age2. “=”的用法 :比較符和約束符 p(X, Y, Z):-Z=X+Y.當變量X、Y、Z全部被實例化時, “=”就是比較符。 如: 對于問題 Goal: p(3, 5, 8).機器回答: yes。 而對于 Goal: p(3, 5, 7). 機器回答: no。 但當X, Y被實例化, 而Z未被實例化時, “=”號就是約束符。 如: Go
14、al: p(3, 5, Z).機器回答: Z=8這時, 機器使Z實例化為X+Y的結果。 2.2.3 輸入與輸出 (1) readln (X) (2) readint (X) (3) readreal (X) (4) readchar (X) (5) write (X1, X2, ,Xn) (6) nl 例 用輸入輸出謂詞編寫一個簡單的成績 數據庫查詢程序。 PREDICATES student(integer, string, real) grade GOAL grade. CLAUSES student(1, 張三, 90.2). student(2, 李四, 95.5). student(
15、3, 王五, 96.4). grade: -write(請輸入姓名:), readln(Name), student(_, Name, Score), nl, write(Name, 的成績是, Score). grade: -write(對不起, 找不到這個學生!).2.2.4 分支與循環1. 1. 分支分支 將 IF x0 THEN x:=1 ELSE x:=0用PROLOG實現則可以是 br:-x0, x=1. br:-x=0. 2. 2. 循環循環 程序1: student(1, 張三, 90.2). student(2, 李四, 95.5). student(3, 王五, 96.4)
16、. print:-student(Number, Name, Score), write(Number, Name, Score), nl, Number=3. 程序2: student(1, 張三, 90.2). student(2, 李四, 95.5). student(3, 王五, 96.4). print:-student(Number, Name, Score), write(Number, Name, Score), nl, fail. print:-. 2.2.5 動態數據庫 動態數據庫操作謂詞: asserta(fact). assertz(fact). retract(fac
17、t). 例 asserta(student(20, 李明, 90.5). retract(student(20,_,_).2.2.6 表處理與遞歸 1.表頭與表尾 表頭是表中的第一個元素;表尾是表中除第一個元素外的其余元素按原來順序組成的表。 表頭與表尾示例 表 表頭 表尾 2. 表的匹配合一 表的匹配合一示例 表1 表2 合一后的變量值 X=a, Y= X=a, Y= X=a, Y= X=a, Y= a X X=a, Y= 例 設計一個能判斷對象X是表L的成員的程序。 分析分析: (1) 如果X與表L中的第一個元素(即表頭)是同一個對象, 則X就是L的成員。 (2) 如果X是L的尾部的成員,
18、 則X也就是L的成員。 程序程序: member(X, X|_). member(X, Head|Tail):-member(X, Tail). Goal: member(a, a, b, c, d). yes Goal: member(e, a, b, c, d). no Goal: member(X, a, b, c, d). X=a 例 表的拼接程序, 即把兩個表連接成一個表。 append(, L, L). append(H|T, L2,H|Tn):-append(T,L2, Tn). Goal: append(1, 2, 3, 4, 5, L). L=1, 2, 3, 4, 5 Go
19、al: append(1,2,3,4,5,1,2,3,4,5). yes Goal: append(1,2,3,4,5,1,2,3,4,5,6). no Goal: append(1, 2, 3, Y, 1, 2, 3, 4, 5). Y=4, 5 Goal: append(X, 4, 5, 1, 2, 3, 4, 5). X=1, 2, 3 Goal: append(X, Y, 1, 2, 3, 4, 5). X=, Y=1, 2, 3, 4, 5 X=1, Y=2, 3, 4, 5 X=1, 2, Y=3, 4, 5 X=1, 2, 3, Y=4, 5 例 表的輸出。 print(). p
20、rint(H|T):-write(H), print(T).例 表的倒置, 即求一個表的逆序表。 reverse(,). reverse(H|T,L):-reverse(T,L1), append(L1,H,L). 2.2.7 回溯控制 截斷謂詞“!”的語義: (1) 若將“!”插在子句體內作為一個子目標, 它總是立即成功。 (2) 若“!”位于子句體的最后, 則它就阻止對它所在子句的頭謂詞的所有子句的回溯訪問, 而讓回溯跳過該頭謂詞(子目標), 去訪問前一個子目標(如果有的話)。 (3) 若“!”位于其他位置, 則當其后發生回溯且回溯到“!”處時, 就在此處失敗, 并且“!”還使它所在子句的頭謂詞(子目標)整個失敗(即阻止再去訪問頭謂詞的其余子句(如果有的話), 即迫使系統直接回溯到該頭謂詞(子目標)的前一個子目標(如果有的話)。 例 考慮下面的程序: p(a). (2-1) p(b). (2-2) q(b). (2-3) r(X):-p(X), q(X). (2-4) r(c). 對于目標: r(Y). 可有一個解 Y=b 但當把式(2-4)改為 r(X):-p(X), !, q(X). (2-4) 時, 卻無解。 為什么呢? 例 設有程序: g0:-g11, g12, g13. (2-5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天復合材料 課件知識點6 高熵合金基復合材料
- 會滾的汽車課件
- 剪輯技巧培訓課件
- 腫瘤科常用藥物臨床應用與管理
- 路基工程這知識培訓
- 2025年 安康市紫陽縣民歌藝術研究中心招聘考試筆試試卷附答案
- 2025年中國噴泉套件行業市場全景分析及前景機遇研判報告
- 小動物搬家課件
- 蛛網膜下腔出血疑難病例討論
- 紅血絲皮膚的成因及護理
- 2024年 黃岡市法院系統招聘審判輔助人員考試真題試題含答案
- 荊州中學2024-2025學年高二下學期6月月考歷史試題答案
- 公司消防網格化管理制度
- 外科換藥拆線技術規范
- 2025年四川瀘州市中考數學試卷真題及答案詳解(精校打印)
- 19S406建筑排水管道安裝-塑料管道
- 動力電池電氣元器件選型報告
- 人教小學英語四年級下冊單詞表
- 精選小學數學教師招聘與進城考試試題(10套)
- 石膏板A1級燃燒性能報告
- 小型雕刻機結構設計說明書
評論
0/150
提交評論