Download presentation
Presentation is loading. Please wait.
Published byDubravka Pavićević Modified 5年之前
1
陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
第十二章 Prolog 程式語言 陳維魁 博士 儒林圖書公司
2
大綱 簡介 基本資料結構 Prolog語言的陳述 Prolog語言推論的過程 精選習題
3
簡介 Prolog(PROgramming in LOGic)是在1970年代初期發展
主要應用在人工智慧(Artificial Intelligence),又稱為人工智慧的高階語言 日本發展的第五代電腦計劃採用Prolog為其語言,使得Prolog語言漸受世人注意,且廣泛地被使用 Prolog為適用於處理符號和非數值運算之程式語言 邏輯式程式語言
4
基本資料結構 – 原子 (atom) 原子的組成有三種可能的方式 由單引號所括住的字串組成: 由特殊的字元所組成的字串
’Peter’,’Visual Basic’,’Prolog’ 由特殊的字元所組成的字串 &&,::=,<>=,.... 由字母,數字或「底線字元」所組成的字串,但須注意,該字串的第一個字元絕對必須是小寫字母 peter,visualbasic,visual_basic
5
基本資料結構 – 變數(variable) 變數是由字母,數字或「底線字元」所組成的字串 注意 字串的第一個字元,必須是大寫字母
Peter,Visualbasic,Visual_basic
6
基本資料結構–結構化資料型態 串列(list) 結構(structure) 結構的語法為 原子名稱 (參數串列)
串列結構(list structure)中,前端與後端皆必須以方括號作記號且串列中的元素必須以“,”作區分。如:〔Pascal, C, Basic, Cobol, Fortran〕 b.在Prolog中以〔H│X〕來表示一個串列的頭部與尾部。以上例來說,H=Pascal(相當於Lisp之CAR)且X=〔C, Basic, Cobol, Fortran〕(相當於LISP之CDR) 結構(structure) 結構的語法為 原子名稱 (參數串列) date(日,月,年) date(25,8,83)
7
Prolog 語言的陳述 事實陳述(fact statement) 規則陳述(rule statement)
目的陳述(goal statement)
8
事實陳述 事實陳述指明“事實” 事實陳述宣告一些無條件成立的事情 通常事實陳述是用來描述個體的性質或個體與個體之間的關係
又稱為無首霍恩子句(Headless Horn clause)
9
事實陳述 實例 注意 個體的性質 female(helen). male(peter). female(jane). male(john).
個體與個體之間的關係 son(john, helen). son(john, peter). daughter(jane, helen). daughter(jane, peter). 注意 Prolog的敘述之後,必須有句點作為結束
10
規則陳述 規則陳述是用來描述事實之間的邏輯關係,即必須在某種條件成立的條件下才為真的事情
又稱為有首霍恩子句(Headed Horn clause) 規則陳述結構: 結論部份:- 條件部份 其中結論部份又稱為首項,而條件部份所有的子條件皆成立時結論部份自然成立
11
規則陳述 實例 mother(helen, jane):- daughter(jane, helen), female(helen).
“:-”右邊的敘述為陳述的來歷或規則 “:-”左邊的敘述,為陳述的結論 若來歷為真則結論也必定為真 陳述的來歷若有多個,則以逗號連接而其意義與邏輯運算子AND相同
12
目的陳述 目的陳述即是用來作為查詢(query)資料之用 目的陳述在程式段中是看不到的
實例 ?- daughter(jane, helen). Yes. ?- daughter(X, helen). jane; No. ?- daughter( _ , helen). jane; No.
13
Prolog 語言推論的過程 以目的陳述為目標,根據程式中的事實與規則陳述來進行推論,並以敘述定義之先後順序來進行推理動作
以目的陳述的函元(functor)以搜尋之依據,若符合者為 事實陳述:直接回答 規則陳述: 以每個規則為子目標 深度優先搜尋(DFS- Depth First Search) 回溯處理(backtracking):在推理的過程中若產生錯誤,此時系統會自動回溯到另一個可能正確的推理方向
14
精選習題 以下的PROLOG程式執行後,結果為何?
append (〔〕,X,X). append (〔H|X〕,Y,〔H|Z〕):-append(X,Y,Z). ?- append (〔a,b〕,〔c,d〕,Z).
15
精選習題 假設有一PROLOG程式如下: first (Xs,Ys,IP):- second(Xs,Ys,O,IP). second (〔X|Xs〕,〔Y|Ys〕,Temp,IP):- Temp1 is X*Y+Temp,Second(Xs,Ys,Temp1,IP). second (〔〕,〔〕,IP,IP). 假設我們所鍵入的問句(query)為: ?- first (〔2,3,1〕,〔3,2,6〕,X). 則所得的結果(亦即X值)為何?
16
精選習題 假設有一個PROLOG程式如下:
class_sem(drinks,drink). class_sem(candies,food). class_sem(cakes,food). class_sem(tea,beverage). class_sem(coffee,beverage). sem_class([],[]). sem_class([X|T],[Y|R]):-class_sem(X,Y),sem_class(T,R). 假設所輸入之問句為: ?- sem_class([mary,eats,cakes],Answer). 則Answer之結果為?
17
精選習題 假設有一個PROLOG程式如下:
test(X,[X|Xs],Xs):-!. test(X,[Y|Ys],[Y|Zs]):-test(X,Ys,Zs). 假設所輸入之問句為: ?- test(3,[1,2,2,3,3,4],Result). 則Result之結果為?
18
精選習題 在PROLOG語言中,事實(fact)和規則(rule)的語法及其用法。
PROLOG程式設計師有那兩種方法可以控制求解(resolution)過程中的型樣比對(pattern match)順序?
Similar presentations