Transcript 投影片 1

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