nhiˆen • Viˆe´t c´ac chu.o.ng tr`ınh biˆen di.ch ngˆon ng˜u.. p c´ac chu.o.ng tr`ınh viˆe´t b˘a`ng m˜a m´ay v`ao trongchu.o.ng tr`ınh Turbo Prolog.. Turbo Prolog l`a mˆo.t mˆoi tru.`o.ng
Trang 1
Chương 4 Ngôn ngữ Prolog
Trang 2Ngˆ on ng˜ u PROLOG
4.1 Mo ’ dˆ ` u a 127
4.2 Ngˆ on ng˜ u PROLOG 131
4.2.1 Qui t˘a´c c´u ph´ap 131
4.2.2 C´ac kiˆe’u dˆo´i tu.o ng 131
4.2.3 C´ac ph´ep to´an, quan hˆe v`a h`am chuˆa’n 137
4.3 Cˆ a´u tr´ uc cu’a chu.o.ng tr`ınh PROLOG 139
4.4 Tˆ an t` u FAIL, nh´ at c˘ a ´t (!) v` a tˆ an t` u NOT 141
4.5 Phu.o.ng th´ u.c xuˆ a´t nhˆ a.p d˜ u liˆ e.u 143
4.5.1 Phu.o.ng th´u.c xuˆa´t d˜u liˆe.u 143
4.5.2 Phu.o.ng th´u.c nhˆa.p d˜u liˆe.u 145
4.6 Mˆ o .t sˆ o ´ th´ı du minh hoa vˆ ` lˆ e a .p tr`ınh PROLOG 148 4.7 B` ai tˆ a.p chu o.ng 4 162
Trang 34.1 Mo ’ dˆ ` u a 127
Prolog l`a mˆo.t kˆe´t qua’ quan tro.ng cu’a cˆong viˆe.c nghiˆen c´u.u trong nhiˆe` u n˘am
bo.’ i nh´om nghiˆen c´u.u cu’a Alain Colmerauer ta.i tru.`o.ng da.i ho.c Marseille,
cˆo.ng ho`a Ph´ap, v`ao nu’ a dˆ. ` u thˆa a.p ky’ 70
Mˆo.t trong nh˜u.ng nguyˆen nhˆan chu’ yˆe´u l`am cho Prolog du.o c phˆo’ cˆa.p
rˆo.ng r˜ai l`a kha’ n˘ang gia’i quyˆe´t c´o hiˆe.u qua’ c´ac vˆa´n dˆe` c´o liˆen quan dˆe´n xu.’l´y k´y hiˆe.u, ch˘a’ng ha.n:
• C´ac co so.’ d˜u liˆe.u quan hˆe
• Logic To´an ho.c
• L´y thuyˆe´t gia’i quyˆe´t vˆa´n dˆ` tr`e u.u tu.o. ng
• Hiˆe’u ngˆon ng˜u tu. nhiˆen, ta.o c´ac giao diˆe.n Ngu.`o.i - M´ay b˘a`ng ngˆonng˜u tu. nhiˆen
• Viˆe´t c´ac chu.o.ng tr`ınh biˆen di.ch ngˆon ng˜u.
• Thiˆe´t kˆe´ cˆa´u tr´uc
• Gia’i c´ac phu.o.ng tr`ınh da.ng k´y hiˆe.u, xu’ l´. y c´ac cˆong th´u.c
• Phˆan t´ıch cˆa´u tr´uc sinh ho´a
• Diˆ` u khiˆe’n Robot, Tr´ı tuˆe nhˆan ta.o, Hˆe chuyˆen gia v.v e
Diˆe’m ma.nh cu’a ngˆon ng˜u PROLOG so v´o.i ngˆon ng˜u lˆa.p tr`ınh truyˆe`nthˆo´ng l`a c´ach tiˆe´p cˆa.n gia’i quyˆe´t vˆa´n dˆe` b˘a`ng viˆe.c mˆo ta’ phu.o.ng ph´ap gia’iquyˆe´t Chu.o.ng tr`ınh Prolog khˆong mˆo ta’ thu’ tu.c gia’i quyˆe´t vˆa´n dˆe` m`a mˆota’ logic cu’a vˆa´n dˆ` cˆe ` n gia’i quyˆe´t.a
Prolog du.o. c coi l`a bu.´o.c th`anh cˆong dˆ` u tiˆen cu’a lˆa a.p tr`ınh logic, hu.´o.ng
dˆa˜n viˆe.c c`ai d˘a.t c´o hiˆe.u qua’ nhiˆe` u kh´ıa ca.nh thˆong minh cu’a mˆo.t chu.o.ngtr`ınh, ch˘a’ng ha.n: lu a cho.n khˆ. ong tˆa´t di.nh, xu’ l´. y song song, go.i thu’ tu.ckhˆong qua tham sˆo´ (pattern dicected procedure call),
V`ı Prolog tiˆe´p cˆa.n c´ac vˆa´n dˆe` mˆo.t c´ach tu nhiˆ. en v`a logic, nˆen nh˜u.ngngu.`o.i m´o.i lˆa.p tr`ınh v`a nh˜u.ng ngu.`o.i lˆa.p tr`ınh viˆen c´o kinh nghiˆe.m dˆe`u c´o
Trang 4thˆe’ d`ung n´o dˆe’ viˆe´t nh˜u.ng chu.o.ng tr`ınh ´u.ng du.ng c´o tˆa` m c˜o nhu c´ac hˆe.chuyˆen gia, c´ac co so.’ tri th´u.c, c´ac giao diˆe.n b˘a`ng ngˆon ng˜u tu nhiˆen, v`a c´ac
hˆe thˆo´ng qua’n l´y thˆong tin go.n nhe v`a hiˆe.u qua’
Diˆe’m ma.nh cu’a Prolog l`a c´ach tiˆe´p cˆa.n gia’i quyˆe´t vˆa´n dˆe` b˘a`ng viˆe.c mˆota’ phu.o.ng ph´ap gia’i quyˆe´t Chu.o.ng tr`ınh Prolog khˆong mˆo ta’ thu’ tu.c gia’iquyˆe´t vˆa´n dˆ` m`e a mˆo ta’ logic cu’a vˆa´n dˆ` cˆe ` n gia’i quyˆe´t, ngh˜ıa l`a a ngu.`o.i lˆa.ptr`ınh cˆ` n d`a anh to`an bˆo s´u.c lu c v`a su quan tˆam cu’a m`ınh v`ao viˆe.c khai b´aocho m´ay t´ınh mˆo.t sˆo´ kh˘a’ng di.nh cˆa` n thiˆe´t vˆe` c´ac t´ınh chˆa´t cu’a c´ac dˆo´i tu.o. ngtrong l˜ınh vu. c du.o c dˆe` cˆa.p v`a mˆo.t sˆo´ luˆa.t suy diˆe˜n, mˆo ta’ t´ınh chˆa´t v`a c´acquan hˆe gi˜u.a c´ac dˆo´i tu.o ng
Du. a v`ao viˆe.c suy diˆe˜n theo c´ac luˆa.t, kˆe´t ho p v´. o.i kh˘a’ng di.nh d˜a cho,chu.o.ng tr`ınh Prolog tu. x´ac di.nh c´ach th´u.c “dˆa˜n” ra l`o.i gia’i cu’a vˆa´n dˆe` Ngo`ai ra Prolog cho ph´ep gia’i quyˆe´t c´ac vˆa´n dˆ` m`e a l`o.i gia’i l`a khˆong tˆa´t di.nhv`a l`am viˆe.c v´o.i c´ac dˆo´i tu.o ng ho`an to`an chu.a du.o c biˆe´t ho˘a.c m´o.i chı’ biˆe´t
mˆo.t phˆa` n vˆe` ch´ung
C˜ung nhu c´ac ngˆon ng˜u lˆa.p tr`ınh truyˆe` n thˆo´ng: Pascal, C, ngu.`o.i ta
xˆay du. ng phˆ` n mˆea ` m Turbo-Prolog gi´up cho ngu.`o.i lˆa.p tr`ınh cha.y chu.o.ngtr`ınh Prolog dˆe˜ d`ang v`a hiˆe.u qua’ ho.n Turbo-Prolog tro.’ th`anh mˆo.t cˆong cu
lˆa.p tr`ınh rˆa´t h˜u.u du.ng v´o.i nh˜u.ng l´y do sau dˆay:
1 C´o thˆe’ ta.o ra c´ac chu.o.ng tr`ınh dˆo.c lˆa.p cha.y trˆen c´ac m´ay PC, v`acho ph´ep dˆ˜ d`ang truy cˆa.p dˆe´n bˆo nh´o v`a c´ac cˆo’ng v`ao/ra c˜ung nhu.ec´ac kha’ n˘ang phˆo´i ho. p c´ac chu.o.ng tr`ınh viˆe´t b˘a`ng m˜a m´ay v`ao trongchu.o.ng tr`ınh Turbo Prolog
2 Turbo Prolog duy tr`ı tˆen biˆe´n cu’a riˆeng ngu.`o.i lˆa.p tr`ınh, ngh˜ıa l`a kˆe’ ca’khi chu.o.ng tr`ınh d˜a du.o. c biˆen di.ch, ta vˆa˜n c´o thˆe’ l`am chu’ chu.o.ng tr`ınh
gˆo´c Trong khi t`ım v`a g˜o lˆo˜i, ta d`ung vˆe´t (trace) cho ph´ep quan s´atviˆe.c thu c hiˆ. e.n chu.o.ng tr`ınh v`a qu´a tr`ınh thao t´ac qua c´ac d´ıch (goal).
3 Turbo Prolog l`a mˆo.t mˆoi tru.`o.ng ph´at triˆe’n chu.o.ng tr`ınh ho`an to`antheo mˆodun C´ac mˆodun chu.o.ng tr`ınh viˆe´t trong Turbo Prolog ho˘a.c
Trang 5Turbo Prolog c´o thˆe’ du.o. c su’ du.ng:.
1 Ta.o h`ınh mˆa˜u (prototype) cho mˆo.t chu.o.ng tr`ınh ´u.ng du.ng Nh˜u.ng
´
y tu.o.’ ng ban dˆ` u c´a o thˆe’ du.o. c mˆo h`ınh ho´a nhanh ch´ong b˘a`ng TurboProlog v`a cha.y thu’ ngay mˆ. o h`ınh d´o
2 Diˆ` u khiˆe’n v`e a chı’ da.o c´ac qu´a tr`ınh sa’n xuˆa´t cˆong nghiˆe.p
3 C`ai d˘a.t c´ac co so.’ d˜u liˆe.u dˆo.ng quan hˆe
4 Di.ch ngˆon ng˜u ho˘a.c di.ch ngˆon ng˜u tu nhiˆen cu’a con ngu.`o.i, ho˘a.c di.cht`u mˆo.t ngˆon ng˜u lˆa.p tr`ınh n`ay sang mˆo.t ngˆon ng˜u lˆa.p tr`ınh kh´ac,ch˘a’ng ha.n mˆo.t chu.o.ng tr`ınh di.ch ngˆon ng˜u viˆe´t b˘a`ng Turbo Prologdi.ch du.o c ngˆon ng˜u Basic sang ngˆon ng˜u C cha.y trong hˆe diˆe`u h`anhUnix trˆen m´ay t´ınh HP-9000
5 Xˆay du. ng c´ac giao diˆe.n b˘a`ng ngˆon ng˜u tu nhiˆen cho c´ac hˆe thˆo´ng phˆa`n
mˆ` m c´e o s˘a˜n dˆe’ c´o thˆe’ truy cˆa.p v`a su.’ du.ng ch´ung thuˆa.n lo i ho.n
6 Xˆay du. ng c´ac Hˆe chuyˆen gia v`a c´ac cˆong cu (Tools) dˆe’ xˆay du ng hˆ. e.chuyˆen gia
7 Viˆe´t c´ac chu.o.ng tr`ınh ´u.ng du.ng cho Tr´ı tuˆe nhˆan ta.o v`a ch´u.ng minhdi.nh l´y
Trang 6Chu.o.ng tr`ınh Prolog bao gˆo`m c´ac khai b´ao: su. khai b´ao n`ay du.o. c ta.oth`anh bo.’ i 3 phˆ` n:a
a) Tˆen v`a cˆa´u tr´uc cu’a c´ac dˆo´i tu.o. ng trong b`ai to´an
b) Tˆen c´ac quan hˆe gi˜u.a c´ac dˆo´i tu.o ng
c) C´ac su. kiˆe.n (fact) v`a luˆa.t (rule) mˆo ta’ nh˜u.ng quan hˆe n`ay
Su. khai b´ao trong chu.o.ng tr`ınh Prolog du.o. c su’ du.ng dˆe’ x´ac di.nh mˆo´i.quan hˆe gi˜u.a c´ac d˜u liˆe.u v`ao v`a c´ac d˜u liˆe.u ra s˜e du.o c Prolog ta.o ra khi n´o
su.’ du.ng c´ac su kiˆe.n v`a luˆa.t Ngo`ai nh˜u.ng khai b´ao cˆa` n thiˆe´t, mˆo.t chu.o.ngtr`ınh Prolog c`on bao gˆo`m mˆo.t danh s´ach c´ac mˆe.nh dˆe` logic ho˘a.c da.ng c´ac
su. kiˆe.n, ch˘a’ng ha.n “Hˆom nay tr`o i mu.a” ho˘a.c da.ng luˆa.t, ch˘a’ng ha.n “Nˆe´u tr` o.i mu.a m` a ba n quˆ en ˆ o th`ı ba n s˜ e u.´ o.t”.
Prolog c´o thˆe’ thu. c hiˆe.n suy diˆe˜n, ch˘a’ng ha.n cho tru.´o.c c´ac su kiˆe.n:Folin th´ıch Mery
Tom th´ıch Sam
v`a luˆa.t: Nˆe´u Tom th´ıch X th`ı Jeanette th´ıch X.
Prolog c´o thˆe’ suy diˆe˜n nhu sau:
Jeanette th´ıch Sam
Ba.n c˜ung c´o thˆe’ cho Prolog mˆo.t d´ıch, ch˘a’ng ha.n:
H˜ay t`ım ngu.`o.i th´ıch Sam?
Khi d´o Prolog s˜e su.’ du.ng kha’ n˘ang suy diˆe˜n cu’a m`ınh dˆe’ t`ım ra tˆa´t ca’ c´acl`o.i gia’i c´o thˆe’ cu’a b`ai to´an
Khi mˆo.t chu.o.ng tr`ınh Prolog du.o c thu c hiˆe.n, hˆe thˆo´ng s˜e cˆo´ g˘a´ng t`ım
ra c´ac tˆa.p gi´a tri c´o thˆe’ thoa’ m˜an d´ıch d˜a cho Prolog su’ du.ng co chˆe´.
backtracking (quay lui), ngh˜ıa l`a khi d˜a t`ım ra mˆo.t l`o.i gia’i th`ı quay la.i bˆa´tc´u mˆo.t gia’ thiˆe´t d˜a x´ac di.nh dˆe’ xem liˆe.u c´o r´ut ra du.o c l`o.i gia’i m´o.i n˜u.akhˆong
Prolog c´o mˆo.t c´u ph´ap rˆa´t ng˘a´n go.n v`a do.n gia’n, nˆen dˆe˜ ho.c ho.n nhiˆe`u
so v´o.i c´ac ngˆon ng˜u lˆa.p tr`ınh truyˆe` n thˆo´ng
Trang 74.2 Ngˆ on ng˜ u PROLOG 131
Theo quan diˆe’m cu’a lˆa.p tr`ınh logic, Prolog l`a mˆo.t ngˆon ng˜u tˆan t`u cˆa´p
1 c´o ha.n chˆe´ du.o c xˆay du ng nˆen t`u c´ac th`anh phˆa`n co ba’n sau dˆay:
• Mˆo.t ba’ng ch˜u c´ai (tˆa.p c´ac k´y hiˆe.u co ba’n cu’a ngˆon ng˜u.)
• Tˆa.p c´ac k´y hiˆe.u h˘a`ng
• Tˆa.p c´ac k´y hiˆe.u biˆe´n
• Tˆa.p c´ac k´y hiˆe.u h`am
• Tˆa.p c´ac k´y hiˆe.u phˆan c´ach
• Tˆa.p c´ac to´an tu’ liˆen hˆe..
4.2.1 Qui t˘ a ´c c´ u ph´ ap
C´ac qui t˘a´c c´u ph´ap cu’a mˆo.t ngˆon ng˜u mˆo ta’ c´ach th´u.c gh´ep nˆo´i ta.o nˆenc´ac t`u cu’a ngˆon ng˜u
Thuˆa.t ng˜u “term” d`ung dˆe’ chı’ mˆo.t d˜ay c´ac k´y hiˆe.u co ba’n ph`u ho p v´o.i
c´ac qui t˘a´c c´u ph´ap cu’a ngˆon ng˜u Ngˆon ng˜u Prolog phˆan biˆe.t 3 loa.i “term”:
• C´ac h˘a`ng
• C´ac biˆe´n
• C´ac kiˆe’u term du.o. c go.i chung l`a cˆa´u tr´uc
4.2.2 C´ ac kiˆ e’u dˆ o´i tu.o ng
Trang 81 Nh´om c´ac k´y hiˆe.u viˆe´t hoa
C´ o hai kiˆ e’u h˘ a `ng k´ y hiˆ e u:
– Kiˆe’u th´u nhˆa´t l`a mˆo.t d˜ay c´ac ch˜u v`a c´ac ch˜u sˆo´ b˘a´t dˆa`u b˘a`ng mˆo.t ch˜u.viˆe´t thu.`o.ng ch˘a’ng ha.n: ta.i ch´u.c, c500, john
– Kiˆe’u th´u hai l`a mˆo.t d˜ay k´y tu bˆ. a´t k`y n˘a`m gi˜u.a hai dˆa´u nh´ay do.n,ch˘a’ng ha.n ‘hoa lan’, ngo`ai ra dˆa´u ga.ch thˆa´p “ ” du.o c d`ung dˆe’ ch`env`ao gi˜u.a hai d˜ay k´y hiˆe.u l`am cho h˘a`ng d´o dˆe˜ do.c, dˆe˜ hiˆe’u ho.n nhiˆe` u.C´ac d˜ay k´y hiˆe.u sau dˆay khˆong pha’i l`a c´ac h˘a`ng k´y hiˆe.u : 124k, Void,1hoa lan, alpha
C´ac h˘a`ng sˆo´ d`ung dˆe’ biˆe’u diˆ˜n d˜e u liˆe.u sˆo´ C´ac thao t´ac t´ınh to´an c´o thˆe’du.o. c thu c hiˆ. e.n v´o.i ch´ung
Trang 94.2 Ngˆ on ng˜ u PROLOG 133
Ba ’ ng c´ ac miˆ ` n d˜ e u liˆ e u chuˆ a’n cu ’ a Prolog
- integer: sˆo´ nguyˆen t`u - 32768 dˆe´n 32767
- real: sˆo´ thu. c cha.y t`u ±10−307 dˆe´n ±10+307
- char: k´y tu. du.o c viˆe´t trong hai dˆa´u nh´ay do.n, ch˘a’ng ha.n: ‘a0
, ‘b0, ‘c0
- string: xˆau k´y tu. du.o c viˆe´t gi˜u.a hai dˆa´u nh´ay k´ep, ch˘a’ng ha.n “ch`ao c´ac
ban”
- file: l`a c´ac tˆe.p tin
- symbol: c´o hai loa.i k´y hiˆe.u
1 D˜ay c´ac ch˜u., c´ac sˆo´ v`a dˆa´u ga.ch thˆa´p D˜ay n`ay pha’i b˘a´t dˆa` ub˘a`ng mˆo.t ch˜u viˆe´t thu.`o.ng, ch˘a’ng ha.n: anh em
2 D˜ay k´y tu. n˘a`m gi˜u.a c˘a.p dˆa´u nh´ay k´ep ch˘a’ng ha.n: “DR no” ,
“Hanoi”, v.v
nhu.ng ch´ung du.o. c xu’ l´. y kh´ac nhau
Biˆ e´n pha’i b˘a´t dˆa` u b˘a`ng mˆo.t ch˜u viˆe´t hoa ho˘a.c mˆo.t dˆa´u ga.ch thˆa´p “ ”(du.o. c go.i l`a biˆe´n vˆo danh anonymous variable) Biˆe´n vˆo danh c´o mˆo.t t´ınhchˆa´t rˆa´t d˘a.c biˆe.t l`a n´o c´o thˆe’ k´y hiˆe.u cho mo.i dˆo´i tu.o ng, v`ı thˆe´ n´o c´o thˆe’du.o. c su’ du.ng v`ao bˆa´t k`y chˆo˜ n`ao m`a mˆo.t biˆe´n kh´ac c´o thˆe’ d`ung du.o c,.nhu.ng khˆong cˆ` n nhˆa a.n mˆo.t gi´a tri cu thˆe’
Ch´ u ´ y: Ta cˆ` n phˆa an biˆe.t hai loa.i biˆe´n
• Biˆ e´n tu do: Prolog khˆong biˆe´t gi´a tri cu’a n´o,
• Biˆ e´n r` ang buˆ o c: Prolog biˆe´t gi´a tri cu’a n´o
Trang 10person, hobby=symbolpredicates
likes(person, hobby)clauses
likes(john, reading)
likes(ellen, computers)
likes(eric, swimming)
likes(eric, reading)
Cha.y chu.o.ng tr`ınh theo chˆe´ dˆo Interactive Mode (hˆo.i thoa.i)
Goal: likes(X,
reading)←-Kˆe´t qua’ l`a: X=ellen
X=eric
2 solutionstrong d´o X du.o. c xem l`a biˆe´n tu. do g˘a´n liˆe` n v´o.i quan hˆe cu’a lu.o ng t`u to`anthˆe’ ∀, c`on reading du.o. c xem l`a r`ang buˆo.c g˘a´n liˆe` n v´o.i quan hˆe cu’a lu.o ngt`u tˆo`n ta.i ∃.
Cˆa´u tr´uc l`a loa.i term th´u 3 (thu.`o.ng du.o c go.i l`a biˆe´n h`am f) du.o c su.’
du.ng trong chu.o.ng tr`ınh Prolog
Mˆ o t cˆ a´u tr´ uc l`a mˆo.t dˆo´i tu.o ng do.n du.o c ta.o nˆen t`u mˆo.t tˆa.p ho p c´ac dˆo´itu.o. ng kh´ac go.i l`a c´ac th`anh phˆa` n C´ac th`anh phˆ` n du.o.a c liˆen kˆe´t v´o.i nhautrong mˆo.t cˆa´u tr´uc dˆe’ c´o thˆe’ xu’ l´. y ch´ung mˆo.t c´ach thuˆa.n tiˆe.n v`a thˆo´ngnhˆa´t
Mˆo.t cˆa´u tr´uc du.o c viˆe´t trong c´u ph´ap Prolog b˘a`ng c´ach mˆo ta’ tˆen du.o c
go.i l`a “functor” cu’a cˆa´u tr´uc, sau d´o mˆo ta’ c´ac th`anh phˆa` n C´ac th`anh phˆ` nan`ay du.o. c viˆe´t trong hai dˆa´u ngo˘a.c do.n, v`a c´ach nhau bo.’i c´ac dˆa´u phˆa’y
co(john, sach(doi gio hu, ten tac gia(emily, brownte)))
Trang 114.2 Ngˆ on ng˜ u PROLOG 135
/* John c´o quyˆe’n s´ach “Dˆo`i gi´o h´u” cu’a t´ac gia’ Emily Brownte*/
Cˆa´u tr´uc s´ach l`a mˆo.t dˆo´i cu’a kh˘a’ng di.nh trˆen v`a tham gia v`ao quan hˆe
“co” nhu l`a mˆo.t dˆo´i tu.o ng do.n
Viˆe.c biˆe’u diˆe˜n c´ac chu.o.ng tr`ınh Prolog nhu l`a c´ac cˆa´u tr´uc functor ( )c´o rˆa´t nhiˆ` u u.u diˆe’m, v`ı r˘e a`ng c´o thˆe’ thao t´ac c´ac th`anh phˆa` n cu’a mˆo.t chu.o.ngtr`ınh mˆo.t c´ach thˆo´ng nhˆa´t b˘a`ng mˆo.t sˆo´ cˆong cu du’ ma.nh, d´o l`a co chˆe´ dˆo`ng nhˆ a´t ho´ a (unification mechanism).
Viˆe.c thˆo´ng nhˆa´t c´ac h˘a`ng sˆo´ v`a c´ac cˆa´u tr´uc v`ao trong mˆo.t kh´ai niˆe.mchung du.o. c go.i l`a “object” (dˆo´i tu.o. ng) cu’a Prolog du.a dˆe´n mˆo.t u.u diˆe’m l´o.nl`a n´o cho ph´ep ngu.`o.i lˆa.p tr`ınh di.nh ngh˜ıa kiˆe’u d˜u liˆe.u m´o.i cu’a m`ınh, ngo`ainh˜u.ng kiˆe’u d˜u liˆe.u chuˆa’n cu’a ngˆon ng˜u., rˆo`i khai b´ao ch´ung v´o.i chu.o.ng tr`ınhbiˆen di.ch
Viˆe.c dˆo`ng nhˆa´t ho´a s˜e bao gˆo`m
- G´an gi´a tri cho c´ac biˆe´n (truyˆe` n tham sˆo´)
- Truy cˆa.p v`ao cˆa´u tr´uc d˜u liˆe.u b˘a`ng co chˆe´ dˆo´i s´anh dˆo´i tu.o ng tˆo’ng qu´at
- Kiˆe’m tra t´ınh b˘a`ng nhau (trˆen co so.’ c´ac nguyˆen t˘a´c cu’a t´ınh b˘a`ng nhau)
- C´o su. giˆo´ng nhau cu’a 2 qu´a tr`ınh dˆo`ng nhˆa´t ho´a v`a h`am cho c´ac dˆo´itu.o. ng b˘a`ng nhau
Trang 12ten sach, tac gia=symbol
so trang=integerxuat ban=sach(ten sach, so trang)predicates
viet boi (tac gia, xuat ban)tieu thuyet dai(ten sach)clauses
viet boi (flemming, sach (“DR NO” , 210))viet boi (melville, sach (“X30” , 600))
tieu thuyet dai(Ten viet boi( , sach(Ten sach, So trang)),
sach):-So trang>300.
Sau dˆay l`a mˆo.t sˆo´ cˆau ho’i v`a tra’ l`o.i:
• Goal: viet boi (X, Y)
←-X=flemming, Y =sach(“DR NO”, 210)
Danh s´ach l`a mˆo.t cˆa´u tr´uc d˜u liˆe.u co ba’n cu’a Turbo Prolog v`a n´o tu.o.ng
tu. nhu l`a ma’ng (array) cu’a Pascal Turbo Prolog tr`ınh b`ay danh s´ach nhu.
Trang 13headtail (H||T): –
write(“The head is H=”, H), nl, write(“The tail is T =”, T ).
goal
headtail([2, 4, 6])Khi cha.y chu.o.ng tr`ınh ta c´o kˆe´t qua’
H = 2
T = [4, 6]
4.2.3 C´ ac ph´ ep to´ an, quan hˆ e v`a h`am chuˆa’n
Ba’ng c´ac kiˆe’u cu’a to´an ha.ng v`a kˆe´t qua’
Trang 14To´ an ha ng 1 To´ an tu ’ To´ an ha ng 2 Kˆ e´t qua’
integer or real / integer or real real
Ba’ng quan hˆe nhu sau
C´ ach viˆ e´t Quan hˆ e.
- abs(x) cho gi´ a tri tuyˆe.t dˆo´i cu’a x
- cos(x), sin(x), tan(x), arctan(x), exp(x), ln(x), log(x), sqrt(x)
- round(x) dˆo´i l`a sˆo´ thu. c, kˆe´t qua’ l`a sˆo´ nguyˆen do x du.o. c l`am tr`on, khˆongpha’i l`a sˆo´ nguyˆen l´o.n nhˆa´t nho’ ho.n ho˘a.c b˘a`ng x, dˆa´u l`a dˆa´u cu’a x.
Trang 154.3 Cˆ a´u tr´ uc cu’a chu.o.ng tr`ınh PROLOG 139
Chu.o.ng tr`ınh Prolog c´o phˆ` n duˆa oi mo.’ rˆo.ng l`a PRO v`a thu.`o.ng du.o c cˆa´uta.o bo’ i 3 ho˘. a.c 4 phˆa` n co ba’n l`a domains, predicates, clauses v` a goal (phˆ` na
goal c´o thˆe’ bo’ di khi cha.y chu.o.ng tr`ınh trong cu.’a sˆo’ Dialog – m´ay yˆeu cˆa`ucho biˆe´t Goal:-? )
Qua mˆo.t sˆo´ th´ı du trˆen, ta d˜a phˆa` n n`ao l`am quen v´o.i mˆo.t chu.o.ng tr`ınhviˆe´t b˘a`ng Prolog
• Phˆ` n domainsa
Dˆay l`a phˆ` n khai b´a ao kiˆe’u cu’a c´ac dˆo´i sˆo´ trong c´ac tˆan t`u cu’a chu.o.ngtr`ınh Tru.`o.ng ho. p c´ac tˆan t`u du.o. c viˆe´t du.´o.i da.ng khai b´ao kiˆe’u dˆo´itu.o. ng tru c tiˆ. e´p th`ı phˆ` n domains khˆa ong cˆ` n khai b´a ao
Nˆe´u goal viˆe´t s˘a˜n trong chu.o.ng tr`ınh th`ı n´o du.o c go.i l`a goal nˆo.i, c`on
khˆong th`ı cha.y ta.i cu’ a sˆ. o’ Dialog go.i l`a goal ngoa.i.
Trang 16d`ung goal nˆo.i m`a muˆo´n c´o mo.i l`o.i gia’i, ta d`ung thˆem tˆan t`u fail (xem mu.csau) o.’ cuˆo´i c`ung trong goal nˆo.i.
Ngo`ai c´ac phˆ` n trˆen, c`a on c´o thˆe’ thˆem c´ac phˆ` n sau:a
• Phˆ` n database (co so.a ’ d˜u liˆe.u) du.o c d˘a.t tru.´o.c v`ung predicates, v`apha’i chı’ r˜o nh˜u.ng tˆan t`u n`ao liˆen quan dˆe´n co so.’ d˜u liˆe.u dˆe` u pha’i khaib´ao dˆ` y du’ o.a ’ v`ung n`ay
person(name, address, age)
• Phˆ` n constants cho tˆen v`a a gi´a tri c´ac h˘a`ng sˆo´, du.o c khai b´ao tru.´o.cv`ung predicates
pi=3.141592653ega=3
Tru.´o.c khi di.ch chu.o.ng tr`ınh Turbo Prolog thay thˆe´ mˆo˜i h˘a`ng (viˆe´tdu.´o.i da.ng mˆo.t chuˆo˜i ch˜u pi, ega ) b˘a`ng gi´a tri cu’a n´o
Trang 174.4 Tˆ an t` u FAIL, nh´ at c˘ a ´t (!) v`a tˆan t` u NOT 141
builds(X, computers), write(X), nl, fail.
Khi cha.y chu.o.ng tr`ınh ta c´o kˆe´t qua’ o.’ cu.’a sˆo’ Dialog:
badung
2 solutions
Ch´ u ´ y: nl l`a viˆe´t t˘a´t cu’a new line (xuˆo´ng d`ong).
4.4.2 Nh´ at c˘ a ´t (!) ng˘an khˆong cho quay vˆe` x´et la.i c´ac su kiˆe.n d´u.ng tru.´o.cn´o Ta d`ung nh´at c˘a´t khi muˆo´n chı’ c´o mˆo.t l`o.i gia’i trong goal ngoa.i
Trang 18buy car(symbol, symbol)car(symbol, symbol, interger)color(symbol)
clauses
buy car(Model,
Color):-car(Model, Color, Price),color(Color), !,
- Nˆe´u cha.y chu.o.ng tr`ınh theo goal ngoa.i
Goal: buy car(X, Y)
←-th`ı ta du.o. c kˆe´t qua’ trˆen cu.’ a sˆo’ Dialog:
X=toyota Y =green
1 solution
- Nˆe´u ta bo’ nh´at c˘a´t ! v`a c˜ung cha.y theo goal ngoa.i
Goal: buy car(X, Y)
←-th`ı ta du.o. c kˆe´t qua’ trˆen cu.’ a sˆo’ Dialog:
X=toyota Y =green X=datsun Y =blue X=mazda Y =red
3 solutions
Trang 194.5 Phu.o.ng th´ u.c xuˆ a´t nhˆ a.p d˜u liˆe.u 143
predicates
male(symbol)smoker(symbol)sophie could darling(symbol)clauses
Khi cha.y chu.o.ng tr`ınh ta thu du.o c kˆe´t qua’:
A possible darling for Sophie is John
A possible darling for Sophie is Bill
2 solutions
4.5.1 Phu.o.ng th´ u.c xuˆ a´t d˜ u liˆ e.u
- Ta d`ung tˆan t`u sau dˆay:
write(Arg1, Arg2, , ArgN)
- Xuˆa´t theo khuˆon da.ng ta d`ung tˆan t`u sau:
write(Formatstring, Arg1, Arg2, , ArgN)
O’ dˆay c´ac dˆo´i sˆo´ Arg1, Arg2, ArgN l`a nh˜u.ng xˆau ho˘a.c biˆe´n, h˘a`ng..
Trang 20Th´ ı du 4.5.1 /*Write.pro*/
constants
a=10goal
X=a+5, write(“a=” ,a), nl, write(“X=” , X), nl,
write(“Du.a cho tˆoi”, X, “dˆo`ng!” )
Khi cha.y chu.o.ng tr`ınh ta c´o kˆe´t qua’
a=10 X=15
Du.a cho tˆoi 15 dˆo`ng!
Tˆan t`u.writef l`a tu.o.ng dˆo´i ph´u.c ta.p Formatstring bao gˆo`m nh˜u.ng k´y
tu. thu.`o.ng, ho˘a.c d˘a.c tru.ng khuˆon da.ng sau dˆay:
% - m.pf
trong d´o:
- % chı’ thi khuˆon da.ng,
- Dˆa´u ga.ch ngang nho’ - chı’ c˘an lˆe` tr´ai (khˆong ga.ch ngang chı’ c˘an lˆe` pha’i)
- m dˆo d`ai tˆo’ng thˆe’ cu’a khuˆon da.ng lu.u tr˜u
- p chı’ sˆo´ c´ac ch˜u sˆo´ thˆa.p phˆan sau dˆa´u chˆa´m
- f cho ph´ep in gi´a tri da.ng khuˆon chuˆa’n
Goal
A=one B=432.7685