200 likes | 527 Views
第十二章 Prolog 程式語言. 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司. 大綱. 簡介 基本資料結構 Prolog 語言的陳述 Prolog 語言推論的過程 精選習題. 簡介. Prolog(PROgramming in LOGic) 是在 1970 年代初期發展 主要應用在人工智慧 (Artificial Intelligence) ,又稱為人工智慧的高階語言 日本發展的第五代電腦計劃採用 Prolog 為其語言,使得 Prolog 語言漸受世人注意,且廣泛地被使用 Prolog 為適用於處理符號和非數值運算之程式語言
E N D
第十二章 Prolog 程式語言 陳維魁 博士 wkchen@pchome.com.tw 儒林圖書公司
大綱 • 簡介 • 基本資料結構 • Prolog語言的陳述 • Prolog語言推論的過程 • 精選習題
簡介 • Prolog(PROgramming in LOGic)是在1970年代初期發展 • 主要應用在人工智慧(Artificial Intelligence),又稱為人工智慧的高階語言 • 日本發展的第五代電腦計劃採用Prolog為其語言,使得Prolog語言漸受世人注意,且廣泛地被使用 • Prolog為適用於處理符號和非數值運算之程式語言 • 邏輯式程式語言
基本資料結構 –原子 (atom) • 原子的組成有三種可能的方式 • 由單引號所括住的字串組成: • ’Peter’,’Visual Basic’,’Prolog’ • 由特殊的字元所組成的字串 • &&,::=,<>=,.... • 由字母,數字或「底線字元」所組成的字串,但須注意,該字串的第一個字元絕對必須是小寫字母 • peter,visualbasic,visual_basic
基本資料結構 – 變數(variable) • 變數是由字母,數字或「底線字元」所組成的字串 • 注意 • 字串的第一個字元,必須是大寫字母 • Peter,Visualbasic,Visual_basic
基本資料結構–結構化資料型態 • 串列(list) • 串列結構(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)
Prolog 語言的陳述 • 事實陳述(fact statement) • 規則陳述(rule statement) • 目的陳述(goal statement)
事實陳述 • 事實陳述指明“事實” • 事實陳述宣告一些無條件成立的事情 • 通常事實陳述是用來描述個體的性質或個體與個體之間的關係 • 又稱為無首霍恩子句(Headless Horn clause)
事實陳述 • 實例 • 個體的性質female(helen).male(peter).female(jane).male(john). • 個體與個體之間的關係son(john, helen).son(john, peter).daughter(jane, helen).daughter(jane, peter). • 注意 • Prolog的敘述之後,必須有句點作為結束
規則陳述 • 規則陳述是用來描述事實之間的邏輯關係,即必須在某種條件成立的條件下才為真的事情 • 又稱為有首霍恩子句(Headed Horn clause) • 規則陳述結構:結論部份:- 條件部份其中結論部份又稱為首項,而條件部份所有的子條件皆成立時結論部份自然成立
規則陳述 • 實例mother(helen, jane):- daughter(jane, helen), female(helen). • “:-”右邊的敘述為陳述的來歷或規則 • “:-”左邊的敘述,為陳述的結論 • 若來歷為真則結論也必定為真 • 陳述的來歷若有多個,則以逗號連接而其意義與邏輯運算子AND相同
目的陳述 • 目的陳述即是用來作為查詢(query)資料之用 • 目的陳述在程式段中是看不到的 • 實例?- daughter(jane, helen).Yes.?- daughter(X, helen).jane;No.?- daughter( _ , helen).jane;No.
Prolog 語言推論的過程 • 以目的陳述為目標,根據程式中的事實與規則陳述來進行推論,並以敘述定義之先後順序來進行推理動作 • 以目的陳述的函元(functor)以搜尋之依據,若符合者為 • 事實陳述:直接回答 • 規則陳述: • 以每個規則為子目標 • 深度優先搜尋(DFS- Depth First Search) • 回溯處理(backtracking):在推理的過程中若產生錯誤,此時系統會自動回溯到另一個可能正確的推理方向
精選習題 • 以下的PROLOG程式執行後,結果為何? append (〔〕,X,X).append (〔H|X〕,Y,〔H|Z〕):-append(X,Y,Z).?- append (〔a,b〕,〔c,d〕,Z).
精選習題 • 假設有一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值)為何?
精選習題 • 假設有一個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之結果為?
精選習題 • 假設有一個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之結果為?
精選習題 • 在PROLOG語言中,事實(fact)和規則(rule)的語法及其用法。 • PROLOG程式設計師有那兩種方法可以控制求解(resolution)過程中的型樣比對(pattern match)順序?