Thông tin tài liệu
LÅÌI NỌI ÂÁƯU
Cún sạch ny nhàòm cung cáúp cå såí l thuút v cạc phỉång phạp
láûp trçnh cå bn nháút ca män hc
«
Láûp trçnh lägich
»
(Programming in Logic).
Ngỉåìi âc s âỉåüc lm quen våïi mäüt säú k thût láûp trçnh lägich âỉåüc ỉïng dủng
tỉång âäúi phäø biãún v ch úu trong lénh vỉûc trê tû nhán tảo (Artificial
Intelligence) nhỉ cäng nghãû xỉí l tri thỉïc, mạy hc, hãû chun gia, xỉí l ngän
ngỉỵ tỉû nhiãn, tr chåi, v.v
Cún sạch gäưm nàm chỉång v phủ lủc nhỉ sau :
− Chỉång 1 giåïi thiãûu ngän ngỉỵ láûp trçnh Prolog lägich dỉûa trãn lägich
Horn (Horn logic). Ngỉåìi âc lm quen våïi cạc kiãøu dỉỵ liãûu ca Prolog,
khại niãûm vãư lût, sỉû kiãûn v viãút cạc chỉång trçnh Prolog âån gin.
− Chỉång 2 trçnh by cạc mỉïc nghéa khạc nhau ca mäüt chỉång trçnh
Prolog : nghéa lägich, nghéa khai bạo v nghéa th tủc, cạch Prolog tr
låìi cạc cáu hi, cạch lm tho mn âêch.
− Chỉång 3 trçnh by cạc phẹp toạn säú hc, phẹp so sạnh v âënh nghéa
hm sỉí dủng phẹp âãû quy trong Prolog.
− Chỉång 4 trçnh by cáúu trục danh sạch v cạc phẹp xỉí l cå bn trãn
danh sạch ca Prolog.
− Chỉång 5 trçnh by k thût láûp trçnh náng cao våïi Prolog.
− Pháưn phủ lủc giåïi thiãûu ngän ngỉỵ láûp trçnh SWI-Prolog, hỉåïng dáùn
cạch ci âàût sỉí dủng pháưn mãưm ny v mäüt säú chỉång trçnh vê dủ tiãu
biãøu viãút trong SWI Prolog.
Cún sạch ny dng lm giạo trçnh cho sinh viãn ngnh Tin hc v cạc
âäüc gi mún tçm hiãøu thãm vãư k thût láûp trçnh cho lénh vỉûc trê tû nhán tảo.
Trong quạ trçnh biãn soản, tạc gi â nháûn âỉåüc tỉì cạc bản âäưng nghiãûp
nhiãưu âọng gọp bäø êch vãư màût chun män, nhỉỵng âäüng viãn khêch lãû vãư màût
tinh tháưn, sỉû giụp âåỵ vãư biãn táûp âãø cún sạch âỉåüc ra âåìi. Tạc gi xin âỉåüc
by t l
ng biãút ån sáu sàõc. Tạc gi cng chán thnh cm ån mi kiãún phã
bçnh âọng gọp ca bản âc gáưn xa vãư näüi dung ca cún sạch ny.
 Nàơng, ngy 27/05/2004
Tạc gi.
MỦC LỦC
CHỈÅNG 1 MÅÍ ÂÁƯU VÃƯ NGÄN NGỈỴ PROLOG 1
I. GIÅÏI THIÃÛU NGÄN NGỈỴ PROLOG 1
I.1. Prolog l ngän ngỉỵ láûp trçnh lägich 1
I.2. Cụ phạp Prolog 2
I.2.1. Cạc thût ngỉỵ 2
I.2.2. Cạc kiãøu dỉỵ liãûu Prolog 3
I.2.3. Chụ thêch 4
II. CẠC KIÃØU DỈỴ LIÃÛU SÅ CÁÚP CA PROLOG 5
II.1. Cạc kiãøu hàòng (trỉûc kiãûn) 5
II.1.1. Kiãøu hàòng säú 5
II.1.2. Kiãøu hàòng lägich 5
II.1.3. Kiãøu hàòng chùi k tỉû 5
II.1.4. Kiãøu hàòng ngun tỉí 5
II.2. Biãún 6
III. SỈÛ KIÃÛN V LÛT TRONG PROLOG 6
III.1. Xáy dỉûng sỉû kiãûn 6
III.2. Xáy dỉûng lût 10
III.2.1. Âënh nghéa lût 10
III.2.2. Âënh nghéa lût âãû quy 15
III.2.3. Sỉí dủng biãún trong Prolog 18
IV. KIÃØU DỈỴ LIÃÛU CÁÚU TRỤC CA PROLOG 19
IV.1. Âënh nghéa kiãøu cáúu trục ca Prolog 19
IV.2. So sạnh v håüp nháút cạc hảng 22
CHỈÅNG 2 NGỈỴ NGHÉA CA CHỈÅNG TRÇNH PROLOG 31
I. QUAN HÃÛ GIỈỴA PROLOG V LÄGICH TOẠN HC 31
II. CẠC MỈÏC NGHÉA CA CHỈÅNG TRÇNH PROLOG 32
II.1. Nghéa khai bạo ca chỉång trçnh Prolog 33
II.2. Khại niãûm vãư gọi mãûnh âãư 34
i
II.3. Nghéa lägich ca cạc mãûnh âãư 35
II.4. Nghéa th tủc ca Prolog 37
II.5. Täø håüp cạc úu täú khai bạo v th tủc 47
III. VÊ DỦ : CON KHÈ V QU CHÚI 48
III.1. Phạt biãøu bi toạn 48
III.2. Gii bi toạn våïi Prolog 49
III.3. Sàõp âàût thỉï tỉû cạc mãûnh âãư v cạc âêch 54
III.3.1. Nguy cå gàûp cạc vng làûp vä hản 54
III.3.2. Thay âäøi thỉï tỉû mãûnh âãư v âêch trong chỉång trçnh 56
CHỈÅNG 3 CẠC PHẸP TOẠN V SÄÚ HC 65
I. SÄÚ HC 65
I.1. Cạc phẹp toạn säú hc 65
I.2. Biãøu thỉïc säú hc 65
I.3. Âënh nghéa cạc phẹp toạn trong Prolog 68
II. CẠC PHẸP SO SẠNH CA PROLOG 73
II.1. Cạc phẹp so sạnh säú hc 73
II.2. Cạc phẹp so sạnh hảng 75
II.3. Vë tỉì xạc âënh kiãøu 77
II.4. Mäüt säú vë tỉì xỉí l hảng 77
III. ÂËNH NGHÉA HM 79
III.1. Âënh nghéa hm sỉí dủng âãû quy 79
III.2. Täúi ỉu phẹp âãû quy 87
III.3. Mäüt säú vê dủ khạc vãư âãû quy 88
III.3.1. Tçm âỉåìng âi trong mäüt âäư thë cọ âënh hỉåïng 88
III.3.2. Tênh âäüü di âỉåìng âi trong mäüt âäư thë 89
III.3.3. Tênh gáưn âụng cạc chùi 90
CHỈÅNG 4 CÁÚU TRỤC DANH SẠCH 95
I. BIÃØU DIÃÙN CÁÚU TRỤC DANH SẠCH 95
II. MÄÜT SÄÚ VË TỈÌ XỈÍ L DANH SẠCH CA PROLOG 98
III. CẠC THAO TẠC CÅ BN TRÃN DANH SẠCH 99
III.1. Xáy dỉûng lải mäüt säú vë tỉì cọ sàơn 99
III.2. Hoạn vë 107
ii
III.3. Mäüt säú vê dủ vãư danh sạch 109
CHỈÅNG 5 K THÛT LÁÛP TRÇNH PROLOG 117
I. NHẠT CÀÕT 117
I.1. Khại niãûm nhạt càõt 117
I.2. K thût sỉí dủng nhạt càõt 118
I.3. Phẹp ph âënh 126
II. SỈÍ DỦNG CẠC CÁÚU TRỤC 131
II.1. Truy cáûp thäng tin cáúu trục tỉì mäüt cå såí dỉỵ liãûu 132
II.2. Trỉìu tỉåüng hoạ dỉỵ liãûu 136
II.3. Mä phng ätämat hỉỵu hản 138
II.4. Vê dủ : láûp kãú hoảch âi du lëch bàòng mạy bay 144
II.5. Bi toạn tạm qn háûu 150
III. QUẠ TRÇNH VO-RA V LM VIÃÛC VÅÏI TÃÛP 163
III.1. Khại niãûm 163
III.2. Lm viãûc våïi cạc tãûp 164
III.3. ỈÏng dủng chãú âäü lm viãûc våïi cạc tãûp 172
PHỦ LỦC A MÄÜT SÄÚ CHỈÅNG TRÇNH PROLOG 187
PHỦ LỦC B HỈÅÏNG DÁÙN SỈÍ DỦNG SWI-PROLOG 194
I. GIÅÏI THIÃUU SWI-PROLOG 194
II. LAIM VIÃUC VÅÏI SWI-PROLOG 195
II.1. Âàût cáu hi 195
II.2. Chảy trçnh demo 196
II.3. Chảy trçnh demo XPCE 197
II.4. Cạc lãûnh âån (Menu commands) 198
II.5. Soản tho chỉång trçnh 200
III. MÄÜT SÄÚ LÃÛNH SWI-PROLOG THÄNG DỦNG 201
TI LIÃÛU THAM KHO 203
iii
CHỈÅNG 1
Måí âáưu vãư ngän ngỉỵ Prolog
« A program is a theory (in some logic)
and computation is deduction from the theory »
J. A. Robinson
« Program = data structure + algorithm »
N. Wirth
« Algorithm = logic + control »
R. Kowalski
I. Giåïi thiãûu ngän ngỉỵ Prolog
I.1. P
rolog l ngän ngỉỵ âỉåüc sỉí dủng phäø biãún nháút trong dng cạc ngän
ngỉỵ láûp trçnh lägich (Prolog cọ nghéa l PROgramming in LOGic).
Ngän ngỉỵ Prolog do giạo sỉ ngỉåìi Phạp Alain Colmerauer v nhọm
nghiãn cỉïu ca äng âãư xút láưn âáưu tiãn tải trỉåìng Âải hc Marseille âáưu
nhỉỵng nàm 1970. Âãún nàm 1980, Prolog nhanh chọng âỉåüc ạp dủng räüng ri
åí cháu Áu, âỉåüc ngỉåìi Nháût chn lm ngän ngỉỵ phạt triãøn dng mạy tênh
thãú hãû 5. Prolog â âỉåüc ci âàût trãn cạc mạy vi tênh Apple II, IBM-PC,
Macintosh.
rolog l ngän ngỉỵ láûp trçnh lägich
P
P
Prolog cn âỉåüc gi l ngän ngỉỵ láûp trçnh k hiãûu (symbolic programming)
tỉång tỉû cạc ngän ngỉỵ láûp trçnh hm (functional programming), hay láûp trçnh phi
säú (non-numerical programming). Prolog ráút thêch håüp âãø gii quút cạc bi toạn
liãn quan âãún cạc âäúi tỉåüng (object) v mäúi quan hãû (relation) giỉỵa chụng.
Prolog âỉåüc sỉí dủng phäø biãún trong lénh vỉûc trê tû nhán tảo. Ngun l
láûp trçnh lägich dỉûa trãn cạc mãûnh âãư Horn (Horn logêc). Mäüt mãûnh âãư Horn
biãùu diãùn mäüt sỉû kiãûn hay mäüt sỉû viãûc no âọ l âụng hồûc khäng âụng, xy
ra hồûc khäng xy ra (cọ hồûc khäng cọ, v.v ).
1
2 Láûp trçnh logic trong Prolog
Vê dủ I.1 : Sau âáy l mäüt säú mãûnh âãư Horn :
1. Nãúu mäüt ngỉåìi gi m (v) khän ngoan thç ngỉåìi âọ hảnh phục.
2. Jim l ngỉåìi hảnh phục.
3. Nãúu X l cha mẻ ca Y v Y l cha mẻ ca Z thç X l äng ca Z.
4. Tom l äng ca Pat.
5. Táút c mi ngỉåìi âãưu chãút (hồûc Nãúu ai l ngỉåìi thç ai âọ phi chãút).
6. Socrat l ngỉåìi.
Trong cạc mãûnh âãư Horn åí trãn, cạc mãûnh âãư 1, 3, 5 âỉåüc gi l cạc lût
(rule), cạc mãûnh âãư cn lải âỉåüc gi l cạc sỉû kiãûn (fact). Mäüt chỉång trçnh
lägich cọ thãø âỉåüc xem nhỉ l mäüt cå såí dỉỵ liãûu gäưm cạc mãûnh âãư Horn, hồûc
dảng lût, hồûc dảng sỉû kiãûn, chàóng hản nhỉ táút c cạc sỉû kiãûn v lût tỉì 1
âãún 6 åí trãn. Ngỉåìi sỉí dủng (NSD) gi chảy mäüt chỉång trçnh lägich bàòng
cạch âàût cáu hi (query/ question) truy váún trãn cå såí dỉỵ liãûu ny, chàóng
hản cáu hi :
Socrat cọ chãút khäng ?
(tỉång âỉång khàóng âënh Socrat chãút âụng hay sai ?)
Mäüt hãû thäúng lägich s thỉûc hiãûn chỉång trçnh theo cạch «suy lûn»-tçm
kiãúm dỉûa trãn väún «hiãøu biãút» â cọ l chỉång trçnh - cå såí dỉỵ liãûu, âãø minh
chỉïng cáu hi l mäüt khàóng âënh, l âụng (Yes) hồûc sai (No). Våïi cáu hi
trãn, hãû thäúng tçm kiãúm trong cå såí dỉỵ liãûu khàóng âënh Socrat chãút v «tçm
tháúy» lût 5 tho mn (vãú thç). Váûn dủng lût 5, hãû thäúng nháûn âỉåüc Socrat
l ngỉåìi (vãú nãúu) chênh l sỉû kiãûn 5. Tỉì âọ, cáu tr låìi s l :
Yes
cọ nghéa Socrat chãút l âụng.
I.2. Cụ phạp Prolog
I.2.1. Cạc thût ngỉỵ
Mäüt chỉång trçnh Prolog l mäüt cå såí dỉỵ liãûu gäưm cạc mãûnh âãư (clause).
Mäùi mãûnh âãư âỉåüc xáy dỉûng tỉì cạc vë tỉì (predicat). Mäüt vë tỉì l mäüt phạt
biãøu no âọ vãư cạc âäúi tỉåüng cọ giạ trë chán âụng (true) hồûc sai (fail). Mäüt vë
tỉì cọ thãø cọ cạc âäúi l cạc ngun lägich (logic atom).
Måí âáưu vãư ngän ngỉỵ Prolog 3
Mäùi ngun tỉí (nọi gn) biãøu diãùn mäüt quan hãû giỉỵa cạc hảng (term).
Nhỉ váûy, hảng v quan hãû giỉỵa cạc hảng tảo thnh mãûnh âãư.
Hảng âỉåüc xem l nhỉỵng âäúi tỉåüng “dỉỵ liãûu” trong mäüt trçnh Prolog.
Hảng cọ thãø l hảng så cáúp (elementary term) gäưm hàòng (constant), biãún
(variable) v cạc hảng phỉïc håüp (compound term).
Cạc hảng phỉïc håüp biãøu diãùn cạc âäúi tỉåüng phỉïc tảp ca bi toạn cáưn gii
quút thüc lénh vỉûc âang xẹt. Hảng phỉïc håüp l mäüt hm tỉí (functor) cọ
chỉïa cạc âäúi (argument), cọ dảng
Tãn_hm_tỉí(Âäúi_1, , Âäúi_n)
Tãn hm tỉí l mäüt chùi chỉỵ cại v/hồûc ch säú âỉåüc bàõt âáưu båíi mäüt chỉỵ
cại thỉåìng. Cạc âäúi cọ thãø l biãún, hảng så cáúp, hồûc hảng phỉïc håüp. Trong
Prolog, hm tỉí âàûc biãût “.” (dáúu cháúm) biãøu diãùn cáúu trục danh sạch (list).
Kiãøu dỉỵ liãûu hm tỉí tỉång tỉû kiãøu bn ghi (record) v danh sạch (list) tỉång
tỉû kiãøu mng (array) trong cạc ngän ngỉỵ láûp trçnh mãûnh lãûnh (C, Pascal ).
Vê dủ I.2 :
f(5, a, b).
student(robert, 1975, info, 2, address(6, 'mal juin', 'Caen')).
[a, b, c]
Mãûnh âãư cọ thãø l mäüt sỉû kiãûn, mäüt lût (hay quy tàõc), hay mäüt cáu hi.
Prolog quy ỉåïc viãút sau mäùi mãûnh âãư mäüt dáúu cháúm âãø kãút thục nhỉ sau :
• Sỉû kiãûn : < >. (tỉång ỉïng våïi lût < > :- true. )
• Lût : < > :- < >.
• Cáu hi ?- < >. (åí chãú âäü tỉång tạc cọ dáúu nhàõc lãûnh)
I.2.2. Cạc kiãøu dỉỵ liãûu Prolog
Hçnh 1.1. biãøu diãùn mäüt sỉû phán låïp cạc kiãøu dỉỵ liãûu trong Prolog gäưm
kiãøu dỉỵ liãûu så cáúp v kiãøu dỉỵ liãûu cọ cáúu trục. Sỉû phán låïp ny nháûn biãút
kiãøu ca mäüt âäúi tỉåüng nhåì bãư ngoi cụ phạp.
Cụ phạp ca Prolog quy âënh mäùi kiãøu âäúi tỉåüng cọ mäüt dảng khạc nhau.
Prolog khäng cáưn cung cáúp mäüt thäng tin no khạc âãø nháûn biãút kiãøu ca
mäüt âäúi tỉåüng. Trong Prolog, NSD khäng cáưn khai bạo kiãøu dỉỵ liãûu.
4 Lỏỷp trỗnh logic trong Prolog
kióứu dổợ lióỷu
kióứu sồ cỏỳp kióứu phổùc hồỹp
hũng bióỳn
sọỳ chuọựi kyù tổỷ nguyón tổớ
Hỗnh I.1. Caùc kióứu dổợ lióỷu trong Prolog
Caùc kióứu dổợ lióỷu Prolog õổồỹc xỏy dổỷng tổỡ caùc kyù tổỷ ASCII :
Caùc chổợ caùi in hoa A, B, , Z vaỡ chổợ caùi in thổồỡng a, b, , z.
Caùc chổợ sọỳ 0, 1, , 9.
Caùc kyù tổỷ õỷc bióỷt, chúng haỷn + / < > = : . & _ .
I.2.3. Chuù thờch
Trong mọỹt chổồng trỗnh Prolog, chuù thờch (comment) õổồỹc õỷt giổợa hai
cỷp kyù hióỷu /* vaỡ */ (tổồng tổỷ ngọn ngổợ C). Vờ duỷ :
//
/ ỏy laỡ mọỹt chuù thờch /
//
Trong trổồỡng hồỹp muọỳn õỷt mọỹt chuù thờch ngừn sau mọựi phỏửn khai baùo
Prolog cho õóỳn hóỳt doỡng, coù thóứ õỷt trổồùc mọỹt kyù hióỷu %.
Vờ duỷ :
%%%%%%%%%%%%%%%
% ỏy cuợng laỡ mọỹt chuù thờch
%%%%%%%%%%%%%%%
Prolog seợ boớ qua tỏỳt caớ caùc phỏửn chuù thờch trong thuớ tuỷc.
. MÅÍ ÂÁƯU VÃƯ NGÄN NGỈỴ PROLOG 1
I. GIÅÏI THIÃÛU NGÄN NGỈỴ PROLOG 1
I.1. Prolog l ngän ngỉỵ láûp trçnh lägich 1
I.2. Cụ phạp Prolog 2
I.2.1. Cạc thût. TRÇNH PROLOG 31
I. QUAN HÃÛ GIỈỴA PROLOG V LÄGICH TOẠN HC 31
II. CẠC MỈÏC NGHÉA CA CHỈÅNG TRÇNH PROLOG 32
II.1. Nghéa khai bạo ca chỉång trçnh Prolog
Ngày đăng: 22/01/2014, 10:20
Xem thêm: Tài liệu Lập trình Prolog_chương 1-2-3 pptx, Tài liệu Lập trình Prolog_chương 1-2-3 pptx