Anda di halaman 1dari 35

1

Tr ng ai hoc Bach Khoa TpHCM


Khoa Cong nghethong tin




HNG DAN KYTHUAT LAP
TR NH TURBO PROLOG






09/2001
2
I . Vt(pr edicat e) - T duy lap tr nh vanh ngha van etr en Pr olog

oi vi Prol og, mot chng trnh cothehi eu nh l acac tri thc c ngi l ap trnh
cung cap cho hethong Prol og. Nhvao cac ki en thc c cung cap, hethong cothe
tral i c cac cau hoi c at ra, vacau tral i cotheat c nhc chesuy l uan
cua hethong da tren nhng ki en thc c cung cap ban au.

n vki en thc mangi l ap trnh cung cap cho Prol og goi l acac vt(predi cate).
Cac vtdung ebi eu di en cac khai ni em mangi l ap trnh muon hethong dung e
suy l uan eat c cac ki en thc khac mamnh mong muon.

Vemat kythuat, cac predi cate cothec xem nh cac ham, nhng gi atrtravech
cothel acac gi atrl uan l y- ung hoac sai . Vagi atrtrave nay chcothes dung
esuy l uan, Pr ol og khong coc thechong chat ham nh cac ngon ngthutuc khac,
chnh i eu nay sel am nhng ngi quen vi vi ec l ap trnh thutuc gap khokhan khi
bc au l ap trnh vi Prol og.

Cong vi ec au ti en khi l ap trnh tren Prol og l anh ngha cac vt- cac khai ni em ma
mnh can cung cap cho chng trnh.

Xet cac v dusau:

VD1:
Dki en ban au: Moi ngi eu phai chet. Socrates l angi .
Yeu cau: Chung ta muon hethong phai cokhanang suy l uan vatral i c cac van
el i en quan en cac khai ni em tren: ai l angi , ai khong l angi , ai phai chet, ai
khong phai chet. ay chung ta comot s suy l uan thong mi nh ac trng cho sc
manh cua Prol og: hethong set ong suy l uan rang Socrates phai chet (i eu khong
c cung cap ban au).

ebi eu di en cac van etren bang ngon ngProl og, chung ta can phai xac nh can
phai bi eu di en nhng khai ni em g.

Trong van enay chung ta cohai khai ni em can bi eu di en: mot thc thenao oco
thel angi (hoac khong), vamot thc thenao ocothechet.

Nh vay chung ta bi eu di en van eau ti en bang ngon ngProl og nh sau:

nguoi (symbol )

3
Symbol l amot ki eu dl i eu ac bi et cua Prol og, dung ebi eu di en cho mot thc the,
mot khai ni em tong quat. Chung ta setrl ai van enay sau.

Nh vay chung ta va nh ngha mot khai ni em: mot symbol nao ocothel angi ,
mot symbol nao khac th khong.

Hi eu nh mot snh ngha ham, chung ta cothexem nh nh ngha mot ham mang
ten nguoi , ham nay cothong somot bi en thuoc ki eu dl i eu symbol , vaket quacua
ham nay, khong can phai khai bao thuoc veki eu g, v chcothethuoc ki eu bool ean,
chcotheung hoac sai . Nhi em vu cua Prol og l aphai tral i c vi gi atrsymbol
nhap vao, th ham nay cho ra ket quaung hoac sai , tc symbol ay cophai l angi
hay khong. Prol og chcothe l am c i eu nay neu nh neu nh chung ta cung cap
cho hethong mot c chesuy l uan ung an, tc l agi ai thch c cho Prol og hi eu
nh thenao l angi ?

Tng tnh vay, chung ta nh ngha vevan emot thc thenao ophai chet bang
vtsau

chet(symbol )

Nh vay vi bai toan aneu, chung ta seat ra hai vt

nguoi (symbol )
chet(symbol )


VD2:
Yeu cau: tnh gi atrgi ai tha cua mot songuyen bat ky.

Bai toan tren khong cho bi et dki en ban au. Chung ta phai cung cap cac dki en
ban au, eProl og cotheda vao oesuy l uan, etohethong cothegi ai quyet
c yeu cau cua chung ta. Vi ec cung cap dki en ban au cho hethong l arat quan
trong quyet nh van egi ai quyet yeu cau cua chung ta.

Mot trong nhng cach gi ai quyet cothec l a chon l achung ta secho hethong
bi et gi atrgi ai tha cua toan bosonguyen: gi ai tha cua 0 l a1, gi ai tha cua 1 l a1,
gi ai tha cua 2 l a2, gi ai tha cua 3 l a6, gi ai tha cua 4 l a24Dedang nhan thay
rang cach nay l akhong khathi , vatrong thc te, con ngi cung khong ti ep thu tr i
thc theo cach nay.

4
Chung ta cothe cung cap dki en cho hethong theo cach khac: gi ai tha cua mot so
l atch cac sot1 en soo.

Nh vay vi cach gi ai quyet nay, chung ta cohai khai ni em can phai cung cap: gi ai
tha cua mot sol ag, vatch cua cac songuyen tnh t1 en mot sol ag?

Cach at van enay cothegi ai quyet c bai toan, tuy nhi en chung ta cotheat
van etheo mot cach khac n gi an, vahp vi ti nh than cua Prol og hn: gi ai tha
cua 0 l a1, vagi ai tha cua mot sol n hn 0 l agi ai tha cua sol i en trc nonhan
vi chnh no.

Vi cach at van enay, chung ta chcomot khai ni em phai bi eu di en: gi ai tha cua
mot sol ag? (that ra chung ta con mot sokhai ni em phai a ra: mot song trc
mot sol ag, nhan hai songha l ag, tuy nhi en Prol og acung cap cac toan tegi ai
quyet van enay. Hi eu theo mot ngha nao o, cac van etren l acac ti en e, khong
can phai gi ai thch vi hethong.)

Neu quen vi ngon ngl ap trnh thutuc, chung ta cokhuynh hng khai bao v t
di en takhai ni em gi ai tha nh sau:

gi ai thua(i nteger )

ay cach at van enh vay l akhong thch hp vi ngon ngProl og, v

. Mot vtchcothetral i l aung hoac sai , trong khi chung ta ang mong
muon ket quatravetheo cach khai bao nay mot so

. Ngon ngProl og khong coschong chat ham, ngha l aket qua cua ham (v
t) khong thedung nh mot thong socho mot vtkhac, trong khi chung ta ang nh
dung ket quacua ham nay etnh ti ep gi atrcho mot ham khac.(Chung ta nh dung
ham nay etnh gi ai tha cua n -1 , roi nhan ti ep cho n era ket quacuoi cung).

Vtthch hp sec khai bao nh sau:

gi ai thua(i nteger ,i nteger )

i eu nay, hi eu theo ngon ngthutuc, ngha l achung ta khai bao mot ham cothong
sol a hai songuyen, vaket quatravesel aung hoac sai .

i eu chung ta muon di en taco ngha l a: gi ai tha cua mot songuyen (i nteger) sel a
mot songuyen khac.
5

Neu chung ta gi ai thch c cho Prol og hi eu gi ai tha cua mot songuyen sec
tnh nh thenao, hethong secokhanang tral i cho cacau hoi thuan (gi ai tha cua
mot songuyen l ag), cau hoi nghch (songuyen nao cogi ai tha bang songuyen
nay), vanghi van (gi ai tha cua mot songuyen X cophai l asonguyen Y hay khong).
Tuy nhi en muc ch cua chung ta chcung cap cac dki en ehethong cothetral i
cau hoi thuan (vacothetral i them cau hoi nghi van) mathoi .

Tom tat :

. Lap trnh tren Prol og l acung cap cho hethong cac khai ni em vadi en gi ai cac khai
ni em o.
. Cac khai ni em c cung cap qua cac vt.
. Cac v tcothexem nh cac ham nh chtravegi atrung hoac sai .
. Vi ec hethong cothetral i c nhng cau hoi nao l i en quan en khai ni em a
cung cap phuthuoc vao vi ec chung ta di en gi ai cac khai ni em tren cho hethong



6

I I . Cac clause, cach giai thch cac van et r en Pr olog

Sau khi acung cap cho hethong cac khai ni em can thi et, chung ta can phai gi ai
thch cac khai ni em mnh acung cap, Prol og sedung cac l i gi ai thch nay ethc
hi en vi ec suy l uan vatral i cau hoi cua chung ta.

Cac l i gi ai thch nay c goi l a cac menh e(cl auses). Cohai dang menh e: s
ki en (f act), val uat( rul e)

Cac s ki en l anhng i eu machung ta cong nhan l aung. Luat l a nhng quy tac ma
chung ta xac nh i eu ki en ung cho chung.


VD3: hay vi et phan cl ause cho vtnguoi anh ngha trong VD1

Dki en ban au chcung cap cho chung ta mot van el i en quan en ngi : Socrates
l angi . Theo nh cach t duy trong khong gi an cua bai toan, chcomot con ngi
duy nhat: Socrates. Khong ai khac l angi .

Nh vay chung ta sevi et phan cl ause cho vtnay nh sau:

nguoi (socr ates).

Chung ta va vi et mot s ki en: socrates l angi l ai eu chac chan ung. Bat ky
symbol nao coten l asocrates l angi l achac chan ung, khong can phai comot
i eu ki en rang buoc nao kem theo.

Lu y:

i /Cohai cach vi et dang hang (l i teral ) cho symbol tren Prol og:

. Mot danh hi eu mau bang kytthng (socrates, sOCRATES)
. Mot chuoi kyhi eu at trong cap kyhi eu " ," (" socrates" ," SOCRATES" ,"
sOCRATES" , " Socrates" )

i i / mot menh el uon ket thuc bang kyt'.'

VD4: hay vi et phan cl ause cho vtchet trong VD1.

7
Dki en ban au chcung cap cho chung ta mot s ki en l i en quan en van enay:
symbol sephai chet neu (vachneu) ol angi . i eu nay sexac nh mot quy tac:
symbol sechphai chet, tc vtsetraveket quatrue, neu symbol ol angi . Van
esymbol nao l angi vasymbol nao khong l angi chung ta aa ra khai ni em
vagi ai thch cho Prol og trong cac v du1 va3.

Nh vay phan menh esec vi et nh sau;

chet(X): -nguoi (X).

Menh edang rul e sebao gom hai phan, nam hai ben cap kyhi eu " :-" . Phan ben
trai cho bi et vt ang c ecap vacac thong sotng ng. Phan ben phai , xac
nh i eu ki en tral i ung cho l uat tren, bao gom cac l i goi cac v tkhac, c
ngan cach bi kyhi eu ',', goi l acac menh econ (sub-cl ause). Trong v dutren, chco
mot sub-cl ause. Mot l uat chtr al i ung neu tat cacac sub-cl ause ben vephai eu tr a
l i ung.

Trong v dutren, chung ta comot bi en X. Tat cacac thong somau bang kyt hoa
eu c Pr ol og hi eu l abi en. Bi en nay l athong socua vtchet. Do a khai bao
phan vt, X sec hi eu l a mot bi en thuoc ki eu symbol . Ket quasetraveung
neu tat casub-cl ause ben vephai eu tral i l aung. Trong trng hp nay, chco
mot sub-cl ause xac nh xem X cophai l angi khong. Nh vay chung ta abi eu
di en c khai ni em mot symbol sephai chet neu symbol ol angi , tc l atat ca
nhng dki en ban au c cung cap.

VD5: Hay vi et phan cl ause cho vtgi ai thua VD2.

Tcac dki en c cung cap (do chung ta t cung cap cho mnh egi ai bai toan),
chung ta thay comot s ki en chac chan ung: gi ai tha cua 0 l a1, vacomot l uat suy
di en: gi ai tha cua n l a(n-1)! * n.
Chung ta sevi et phan menh echo vtnay nh sau:

gi ai thua(0,1).
gi ai thua(X,Y) -: X1 = X -1, gi ai thua(X1,Y1), Y = Y1* X.

Trc khi hi eu nhng i eu c motatrong cac v du tren, chung ta secomot so
nhan xet nh sau:

i ./Trc ti en, chung ta thay vtgi ai thua c bi eu di en bang hai menh e: mot s
ki en vamot l uat.

8
Khi vi et nhi eu menh echo mot v t, cac menh ephai c vi et l i en ti ep nhau
(khong c xen menh ecua vtkhac vao).

i i ./ Chung ta sehi eu hai menh econ au ti en X1 = X -1, gi ai thua(X1,Y1) bi eu di en
cho cong vi ec tnh gi ai tha cua X-1. Tuy nhi en chung ta khong c vi et gi ai thua(X-
1,Y1). Thong socua cac menh econ phai l abi en, khong c phep l abi eu thc.

i i i ./ Chung ta thay sxuat hi en cua kyhi eu '= ' vasehi eu nh menh econ X1 = X-1
l aphep gan. Tr en Pr ol og khong cophep gan. Kyhi eu '=' bi eu di en cho mot phep toan
ac bi et cua Prol og, phep hp nhat (uni f i cati on), vacung nh cac menh ekhac, phep
hp nhat nay setraveket quaung hoac sai , bi eu di en cho ket quacong vi ec hp
nhat thanh cong hay khong. Xem them vephep hp nhat trong cac phan sau.

i v./ Phan vttren bi eu di en cho vi ec sdung kythuat l ap trnh equy, sel asc
manh l ap trnh chuyeu cua Prol og. Xem them vephan l ap trnh equy tren Prol og
trong cac phan sau.

Tom tat

. Cac khai ni em c motaqua cac vtsec gi ai thch bang cac menh e.
. Cohai l oai menh e: s ki en val uat.
. Thong soc truyen trong l i goi cac menh econ phai l abi en.
. Cac kythuat chuyeu el ap trnh tren Prol og l ahp nhat vaequy.
9


I I I . Thc thi chng tr nh. - at cau hoi vanhan cau t r ali

en ay chung ta acothethc thi cac chng trnh tren. Tren ca soProl og, nhap
noi dung oan chng trnh vao vung ca sosoan thao. (Chung ta cothel uon chuyen
vevung ca sonay bang phm nong Al t+E)


VD6: Vi et chng trnh hoan chnh cho VD1.

Noi dung chng trnh nhap hoan chnh cho VD1 nh sau:

pr edi cates
nguoi (symbol )
chet(symbol )
cl auses
nguoi (" Socr ates" ).
chet(X): -nguoi (X).

Nh vay chung ta thay trong mot chng trnh Prol og, cac phan khai bao cac vtva
hi en thc cac menh ec bat au bang cac tkhoapr edi cates vacl auses.

Lu y:Phan predi cates phai c vi et trc phan danh cho cl auses

Chung ta sdung Turbo Prol og ethcac v dutren

10
Gi ao di en chng trnh senh sau:






ethc thi chng trnh, ngi sdung nhap yeu cau (cau hoi ) cua mnh cho he
thong.

Yeu cau nay goi l agoal . Cohai l oai goal :goal noi va goal ngoai . Phan nay chtrnh
bay vegoal ngoai .

enhap goal ngoai , sau khi ahoan tat vi ec soan thao chng trnh, chung ta dung
phm tat Al t+R e chuyen sang vung gi ao ti ep cua chng trnh.

Cau hoi chung ta at ra cho hethong phai chda vao cac tri thc machung ta a
cung cap cho hethong. Chung ta acung cap cho hethong cac khai ni em nguoi va
chet, nh vay chung ta chcotheat cac cau hoi l i en quan en hai khai ni em nay.

Ngay sau dau nhac Goal : tai vung ca sonay, chung ta cothenhap cau hoi nh sau:

nguoi (" Socr ates" )

Da tren ti nh than cua cua khai ni em, cau phat bi eu cua chung ta congha l a
" Socrates l angi " , vav ay l acau phat bi eu trong vung goal , nen hethong sehi eu
rang chung
Vung soan thao (an Al t+E e
chuyen en vung nay khi dang
cac vung ca sokhac)
Vung gi ao ti ep (an Al t+R) e
thc thi chng trnh khi soan
thao xong chng trnh
Nhap goal (ngoai ) vao ay
11
ta muon at mot cau hoi nghi van " Socrates l angi phai khong?"

Sau khi an Enter, chung ta sethay hethong congay cau tra l i : Yes.

Thay bang mot ten khac, v du:

nguoi (" Xeda" )

Hethong setral i No.
Chung ta thay cac cau tral i cua hethong da tren ki en thc machung ta acung
cap. Da vao nhng g machung ta acung cap, hethong chbi et comot ngi l a
Socrates, tat canhng symbol khac eu khong phai l angi .

Tuy nhi en, vi c chesuy l uan machung ta cung cap, hethong cothe suy l uan ra
nhng i eu cha c cung cap san. ay chnh l ai em tao nen sc manh l ap trnh
cua Prol og.

Nhap vao goal nh sau:

chet(" Socr ates" )

Cau tral i l a: Yes.

Vi mot ten ngi khac:

chet(" Xeda" )

Cau tral i l a: No.

Hethong at ong suy l uan theo nguyen l ymachung ta muon nophai " hoc" : ai l a
ngi th ngi ophai chet.

Ngoai nhng cau hoi dang Yes/No, Prol og cothetral i cac cau hoi yeu cau tm ap
so.

Chung ta nhap vao mot goal nh sau:

chet(X)

12
en ay, trong cau hoi cua chung ta comot bi en: X (nhac l ai : moi danh hi eu mau
l akythoa eu l abi en). Khi trong cau hoi cua chung ta cha mot (hoac nhi eu) bi en,
hethong setm cac gi atrcothecocua bi en echo cau phat bi eu cua ta l aung.

Hi eu mc yni em, cau hoi cua chung ta l a: ai l angi ? Ket quatral i cua cau hoi
(ai ) sec cha trong bi en X.

Cau tral i sel a: X = Socrates

Tng t nh tren, hethong seda vao c chesuy l uan ac cung cap etm ra
l i gi ai vi nhng cau hoi danh cho cac vtcocac menh etng ng l acac l uat.
Nhap vao goal nh sau:

chet(X)

Hethong setral i nh sau:

X = Socrates.

VD7: Hoan chnh vathc thi chng trnh cho VD2

Chng trnh hoan chnh nh sau:

pr edi cates
gi ai thua(i nteger ,i nteger )
cl auses
gi ai thua(0,1).
gi ai thua(X,Y): - X1 = X -1, gi ai thua(X1,Y1), Y = X* Y1.

Chung ta l u yl akhi ket thuc moi menh eeu cokyhi eu '.'
Chung ta cotheat cho hethong goal dang nghi van nh sau:

gi ai thua(3,6)

Hi eu theo ngon ngtnhi en sel a: cophai gi ai tha cua 3 l a6 hay khong?

Cau tral i l a: Yes

Hoac chung ta cotheat cau hoi :

gi ai thua(3,8)
13

Cau tra l i sel a: No.

Chung ta seat cau hoi theo dang tm l i gi ai :

gi ai thua(3,X)

Cau tral i sel aX = 6

Chung ta cung cotheat cau hoi ngc:

gi ai thua(X,6)

Ytng cua cau hoi sel a: gi ai tha cua sonao sebang 6.

Tuy nhi en chung ta khong cung cap cho hethong c chesuy l uan etral i cau hoi
nay. He thong setral i : No Sol uti on.

Tat nhi en chung ta cotheat cau hoi nh sau:

gi ai thua(X,Y)

Cahai thong soeu l abi en. Nh vay cau hoi cothehi eu l a: sonao (X) gi ai tha th
thanh mot sokhac (Y). Cau hoi gan nh vongha vanhng cau tral i cua hethong
cung sechang mang mot y ngha thc scongha nao.

Tom tat :

. Chng trnh Prol og sehoat ong theo c chetng tac. Ngi sdung secung cap
yeu cau, goi l agoal , vahethong setral i cac yeu cau nay.
. Cohai l oai goal : goal noi vagoal ngoai .
. Neu goal khong cha bi en th hethong seki em tra phat bi eu cua chung ta l aung
hoac sai , ngc l ai , hethong setm cac gi atrcua cac bi en l am cho phat bi eu cua ta
l aung.

14
I V. Phep hp nhat - C chetm cau t r ali cua Pr olog.

Phep hp nhat

Cong vi ec quan trong nhat cua Prol og trong vi ec tm cau tral i l athc hi en vi ec hp
nhat. Phep hp nhat c bi eu di en bang dau =, vano cohai thanh phan, tam goi l a
vetrai vephai . Phep hp nhat setraveket quatrue hoac f al se

Cocac trng hp hp nhat sau:

a. Cahai veeu l ahang hoac bi eu thc cha toan hang. Neu gi atrcua hai
ve l abang nhau th phep hp nhat thanh cong (ap sol atrue), ngc l ai phep hp
nhat sethat bai (ket qual af al se)

7 = 7 true
7 = 8 f al se
" abc" = "abc" true
" abcd" = "abc" f al se
7 = 6 +1 true
6 = 7 +1 f al se

b. Mot trong hai vel ahang hoac trong bi eu thc cha toan hang, veki a l a
bi en hoac bi eu thc cocha bi en.

. Trng hp 1: Neu tat cacac bi en eu cogi atr(goi l acac bi en tnh trang
bound), chung ta quay vetrng hp a
7 = X f al se neu X acogi atrl a6
7 = X +1 true neu X acogi atrl a6
Y = " Socrates" true ney Y acogi atrl a" Socrates"

. Trng hp 2: Neu cobi en cha cogi atr(goi l abi en tnh trang unbound),
Prol og segan gi atrcho bi en sau cho hai vecogi atrnh nhau vatraveket qual a
true. Neu khong tm gi atrnh vay, phep hp nhat secho ket qual af al se.

7 = X true neu X cha cogi atr, sau phep hp nhat nay, X secogi atrl a7
-1 = X* X f al se v khong thetm cho X gi atrnao l am cho gi atrhai vel a
nh nhau.

c. Cahai veeu l abi en hoac cac bi eu thc cocha bi en

15
. Trng hp 1: tat cacac bi en eu cocha gi atr, chung ta sequay vetrng
hp a
X = Y true neu caX vaY eu acogi atrvanhng gi atrnay bang nhau
X -1 = Y f al se neu X vaY eu acogi atrvaX nhohn Y

. Trng hp 2: tat cacac bi en cua mot veeu acogi atr, chung ta sequay
vevetrng hp b

X = Y true neu X cha cogi atrvaY acogi atr, sau phep hp nhat, X se
nhan gi atrcua Y
X - 1 = Y true neu X cha cogi atr, Y acogi atr. Sau phep hp nhat, X
secogi atrbangg Y +1

. Trng hp 3: cahai veeu con cha bi en tnh trang unbound hp nhat
that bai

X = Y f al se neu caX vaY eu cha gan gi atr
X-1 = Y f al se neu caX vaY eu cha gan gi atr

C chetm cau tr ali cua Pr olog

Neu chung ta at ra cho Prol og mot cau hoi , Prol og sethc hi en cong vi ec so trung
(match), tc l atm menh eau ti en ecap en khai ni em machung ta muon hoi .

Trl ai VD6, sau khi ahoan tat chng trnh, chung ta at ra Goal nh sau:

nguoi (" Socr ates" )

Prol og setm menh eau ti en col i en quan en khai ni em nguoi . Hi en nhi en, menh
eau ti en (vaduy nhat col i en quan en khai ni em nay l a:

nguoi (" Socr ates" )

Nh vay, khi a co goal (nguoi (" Socr ates" )) vatm thay menh e l i en quan
(nguoi (" Socr ates" )), Prol og seti en hanh tm ki em l i gi ai , cong vi ec nay ti en hanh
bang cach tao moi l i en ket gi a cac thong sophan goal vacac thong sophan
menh e. Cocac trng hp sau:

a. Cahai thong sonay eu l acac bi en unbound, trong trng hp nay Prol og
sexem cahai thong sol a1.
16
b. tat cacac trng hp khac, Prol og seti en hanh phep hp nhat gi a hai
l oai thong so.

Sau khi atao moi quan hegi a cac thong sophan goal vaphan cl ause, Prol og se
ti en hanh cac sub-cl ause (neu menh enay mot l uat). Neu tat cacac sub-cl ause thanh
cong vacac bi en phan goal atnh trang bound (tc l aacogi atr), Prol og se
thong bao l i gi ai .

Neu l acau hoi thuoc dang Yes/No nh v du tren, tc l acau hoi khong cha bi en,
Prol og setral i Yes neu cong vi ec hp nhat nh anoi phan b thanh cong vacac
sub-cl ause eu thanh cong (neu menh eso trung l amot l uat).
Quay trl ai vi v ducua chung ta, ay thong socua Goal l amot hang ("Socrates),
vathong socua menh etng ng cung l amot hang (" Socrates), hai hang nay hp
nhat thanh cong, vaket quatral i l aYes.

Neu chung ta at ra cau hoi khac:

nguoi (" Xeda" )

Prol og cung ch tm thay mot menh e l i en quan en khai ni em nay
(nguoi (" Socr ates" )), vav s hp nhat gi a hai hang " Socrates" va" Xeda" that bai ,
ap sosetral i l aNo.

Chung ta xet trng hp cau hoi cua chung ta co cha bi en:

nguoi (X)

Hethong setm thay menh ecol i en quan en van enay (nguoi (" Socr ates" )) , va
ti en hanh hp nhat gi a X va"Socrates" , vav X cha cogi atr(unbound) nen phep
hp nhat thanh cong, X cogi atrl a" Socrates".

V vi ec hp nhat gi a cac thong sogi a phan goal vaphan cl ause athanh cong, ay
l amot ski en nen khong can phai thc hi en phan sub-cl ause, vasau khi hp nhat, tat
cacac bi en can tm acogi atr(ay chcomot bi en l aX), nen hethong secong
boatm ra l i gi ai vai n ra gi atrcua X ( X = "Socrates" )

Chung ta xet trng hp khi cau hoi phan goal so trung vi mot l uat:

chet(Y)

17
Chung ta hoan toan cotheat cau hoi l achet(X), nhng chung ta seat ten bi en khac
eti en phan bi et gi a bi en trong cau hoi cua goal vathong socuc bomenh e.

Cau hoi trong goal c so trung vi menh esau:

chet(X): - nguoi (X).

V hai bi en X(thong socua menh e) vaY(thong socua goal ) eu cha cha gi atr,
hethong sexem cahai bi en l amot, tc l a, khi X coc gi atrth Y cung cogi atr
ovangc l ai .

Do ay l amot l uat, nen hethong seti en hanh thc hi en cac sub-cl ause. Hethong se
thc hi en sub-cl ause au ti en nguoi (X).

Quatrnh thc hi en cac sub-cl ause vephai sec thc hi en nh sau:

a. Neu sub-cl ause nay cothong sol abi en unbound, Prol og setm gi atrcua
bi en nay esub-cl ause cogi atrYes, neu khong tm c gi atrnh vay, sub-cl ause
sethat bai .

b. Neu sub-cl ause cothong soeu l abi en bound (acogi atr) hoac l ahang,
Prol og seki em tra xem sub-cl ause cotravegi atrYes hay khong, neu khong, sub-
cl ause sethat bai .

Cac sub-cl ause sec ti en hanh ttrai qua phai , vaneu comot sub-cl ause that bai ,
menh ec so trung sethat bai .

Trong trng hp tren, khi ti en hanh sub-cl ause nguoi (X), do bi en X l aunbound, nen
chung ta ri vao trng hp a, hethong setm gi atrcua X cho sub-cl ause tren l a
ung. Cach tm ki em cau tral i cho sub-cl ause nay hoan toan gi ong nh cach he
thong tm cau tral i khi chung ta at cau hoi nay trong phan goal , vanh vay X seco
gi atrl a" Socrates" sau khi sub-cl ause nay thc hi en xong.

Do X vaY c xem nh mot, nen khi X cogi atrl a" Socrates" th Y cung cogi atr
nay.

Do tat cacac sub-cl ause athc hi en xong, vaY acogi atr, nen Prol og cong bol a
atm ra l i gi ai vai n ra gi atrcua Y.

Tom tat :

18
. Phep hp nhat l anen tang cua moi hoat ong cua Prol og etm ra l i gi ai
. etral i cau hoi , Prol og so trung cau hoi vi menh evatao moi l i en quan gi a
cac thong so.
. Prol og tm ra l i gi ai khi thc hi en thanh cong mot menh evatat cacac bi en neu
co
trong cac thong socua goal eu acogi atr

19
V. Squay lui - Khong chesolng li giai -Vt nhat cat vafail

Goal noi vagoal ngoai (inter nal goal vaexter nal goal)

Khi chung ta sdung Al t-R echuyen sang ca sogi ao ti ep vanhap vao goal , goal
nay goi l agoal ngoai .

Chung ta cothethem phan goal nay han trong phan soan thao chng trnh, goal nay
goi l agoal noi .

VD8: Vi et l ai chng trnh gi ai quyet VD6 sdung goal noi

Chng trnh c vi et l ai nh sau:

pr edi cates
nguoi (symbol )
chet(symbol )
cl auses
nguoi (" Socr ates" ).
chet(X): -nguoi (X).
goal
nguoi (X),wr i te(X)

Trong v dunay, chung ta athem phan goal vao trong chng trnh. Khi thc thi , he
thong sekhong hoi goal na, vatong thc hi en cac yeu cau trong phan goal .

Tuy nhi en khi thc hi en goal noi , hethong sekhong tong i n ket quana. Chung ta
phai goi vt wr i te e l am i eu nay. Vt nay secho ket qual aung neu cac thong
sonhap vao l aeu l abi en trang thai bound hoac l ahang.

Squay lui (back-t r acing) tr en Pr olog

Hp nhat l ahon anen tang cho c chesuy l uan cua Prol og, tuy nhi en, etm ra l i
gi ai ung, Prol og phai sdung c chequay l ui , khi gi atrau ti en c gan cho thong
sokhong phai l al i gi ai .

Chung ta xet v dusau:

VD9:
pr edi cates
nguoi (symbol )
20
vua(symbol )
sungsuong(symbol )
cl auses
nguoi (" Socr ates" ).
nguoi (" Xeda" ).
vua(" Xeda).
sungsuong(X) : - nguoi (X),vua(X).

Nh vay trong v du nay, ngoai khai ni em ve ngi , chung ta a ra khai ni em ve
vua vas sung sng. Di en gi ai nhng thong ti n trong cac dki en tren thanh ngon
ngtnhi en, chung ta coc cac i eu sau: " Thegi i machung ta song cohai ngi
l aSocrates vaXeda. Chung ta comot vua l a Xeda, vamot thc thenao ochsung
sng neu thc theo va ngi va l avua."

Lu yrang trong v dutren, cac menh el i en quan en cung mot vtphai vi et l i en
ti ep nhau.

Xet khi hethong tral i cau hoi sau:

sungsuong(X)

Trc ti en he thong se so trung goal tren vi menh e sungsuong(X) : -
nguoi (X),vua(X). Lu yrang vao l uc nay chung ta cohai bi en X: mot bi en X l athong
socua goal vamot bi en X l athong socua menh e. Venguyen tac, hai bi en X nay
hoan toan khac nhau.

Tuy nhi en, khi so trung goal vi menh e, do cahai bi en X l uc nay eu cha cha gi a
tr, nen chung sec xem nh mot. Nhng can chuyrang bi en X sdung tr ong cac
sub-cl ause l abi en X thong socua menh e.

Sau oProl og seti en hanh cac sub-cl ause. sub-cl ause au ti en, nguoi (X), tng t
nh VD6, Prol og setm c cau tral i l aX = Socrates.

Khi thc hi en sub-cl ause thhai , vua(X), do X acogi atr(Socrates), Prol og seki em
tra xem gi atrnay col am gi atrcua menh el atrue hay khong.

Nh cac v dutren, vi ec ti en hanh tral i mot sub-cl ause cung tng tnh khi tral i
mot goal , Prol og l ai so trung sub-cl ause vi mot menh ecung ten. Prol og tm thay
mot menh el i en quan en vua l avua(" Xeda" ) vati en hanh hp nhat gi a X va
Xeda. Do X acogi atrl aSocrates, vi ec hp nhat that bai .

21
Tuy nhi en khi sub-cl ause nay that bai , khong co ngha rang Prol og sevoi ket l uan
rang menh enay that bai . ay cong vi ec tm ki em cau tral i that bai sau khi bi en
X c gan gi atrvachuyen ttrang thai bound sang unbound. Hethong sequay l ai
thi i em bi en X c gan gi atr(khi tral i sub-cl ause nguoi (X)) , X c chuyen l ai
sang tnh trang unbound, vacogang tm ki em mot gi atrkhac cua X echo menh e
con nay van ung. Cong vi ec nay c goi l aback-traci ng.

Do vi ec so trung sub-cl ause nay vi menh enguoi (" Socr ates" ) that bai , hethong se
so trung vi menh ekhac. Neu khong con menh enao khac l i en quan en sub-
cl ause, vi ec thc hi en menh emi that sthat bai , tuy nhi en ay hethong tm thay
mot menh ekhac l i en quan en khai ni em nay l anguoi (" Xeda" ). Vi ec hp nhat gi a
X va" Xeda" l ai c thc hi en, X secogi atrl aXeda vasau o, khi l ai ti ep tuc thc
hi en sub-cl ause vua(X) th chung ta sededang thay rang sub-cl ause l an nay c thc
hi en thanh cong. Prol og atm ra l i gi ai , tuy nhi en, trng hp nay, ngoai s hp
nhat, Prol og con sdung them mot " vukh" mi , ol asquay l ui ..

Khong chesolng li giai

Chung ta xet v dusau

VD10:

pr edi cates
nguoi (symbol )
chet(symbol )
cl auses
nguoi (" Socr ates" ).
nguoi (" Xeda" ).
chet(X) : - nguoi (X).

V dukhong cog phc tap, so vi VD6, chung ta chthem mot ngi mi l aXeda.
Khi sdung goal ngoai , vi cau hoi

nguoi (X)

Chung ta cohai l i gi ai :

X = Socrates
X = Xeda.

22
Chung ta cam thay hai ap sonay l ahi en nhi en. Tuy nhi en neu chung ta dung goal
noi tng tVD8, chung ta chcomot ap sol aSocrates.

ay l amot trong nhng i em khac bi et can ban cua goal noi vagoal ngoai . Goal noi
chtm cau tr al i au ti en con goal ngoai tm tat cacac cau tr al i cothe.
ekhong chesol ng l i gi ai theo ymnh, chung ta sdung hai v tac bi et l a
nhat cat (cut) vaf ai l , nh cac v dusau:

VD11: Vi et l ai VD10, sdung vtf ai l ei n ra tat cacac l i gi ai trong trng hp
dung goal noi .

Chng trnh sec vi et l ai nh sau:

pr edi cates
nguoi (symbol )
chet(symbol )
cl auses
nguoi (" Socr ates" ).
nguoi (" Xeda" ).
chet(X) : - nguoi (X).
goal
nguoi (X),nl ,wr i te(X),fai l

nl l avtac bi et, l uon traveket qual aung, vachn gi an l axuong dong trc
khi i n thong ti n mi ra ca sogi ao ti ep.

Vtf ai l l amot vtac bi et, l uon l uon traveket qual asai .

Nh vay ei n ra tat cacac ket qua, chung ta dung mot thuthuat (tri ck) thng gap
khi l ap trnh tren Prol og: sau khi atm thay l i gi ai cho sub-goal nguoi (X) vai n gi a
trnay ra bang l i goi vtwr i te(X), chung ta goi vtf ai l enhan c ket qual a
sai . Do c cheback-traci ng anoi tren, Prol og l ai quay l ai thi i em goi sub-goal
nguoi (X) etm l i gi ai khac vai n ra. Quatrnh nay cti ep tuc cho en khi khong
thetm thay them mot l i gi ai nao khac.

Bang cach nay, chung ta ai n ra tat cacac l i gi ai cho cau hoi nguoi (X), tuy nhi en l u
yrang vi goal chnh th khong tm ra l i gi ai (do chung ta l uon goi vtf ai l cho sub-
goal cuoi cung)

VD12: Vi et l ai VD10, dung vtnhat cat eei n ra mot l i gi ai cho cau hoi chet(X)
cho trng hp dung goal ngoai .
23

Vt nhat cat c vi et l a! , l avtac bi et, setral i ung khi goal cha tm thay
l i gi ai nao, ngc l ai sebao l asai .

Chng trnh sec vi et l ai nh sau:

pr edi cates
nguoi (symbol )
chet(symbol )
cl auses
nguoi (" Socr ates" ).
nguoi (" Xeda" ).
chet(X) : - nguoi (X),! .

Khi sdung goal ngoai l achet(X), khi tral i sub-cl ause nguoi (X), hethong tm ra ap
sol aX = Socrates, vav l uc nay menh e c so trung chet(X) cha coap sonao,
vt! ti ep theo setral i l athanh cong.

Do chung ta ang sdung goal ngoai , Prol og setm tat cacac cau tral i cotheco,
nen hethong setm mot cau tral i khac. el am i eu o, hethong setm xem sub-
cl ause nguoi (X) coap sonao khac khong. Chung ta sededang nhan thay rang he
thong tm thay mot ap sokhac l aX = Xeda. Tuy nhi en do goal acomot l i gi ai ,
nen sub-cl ause ti ep theo l a! sebao l athat bai , val i gi ai thhai khong c chap
nhan.


Tom tat

. Goal noi setm l i gi ai au ti en, vagoal ngoai setm tat cacac l i gi ai cotheco.
. Prol og sesdung c chequay l ui khi mot bi en khi chuyen ttrang thai unbound
sang bound sedan en s that bai trong vi ec truy tm l i gi ai
. Vtf ai l l uon tral i l asai , sdung khi chung ta muon i n tat cacac l i gi ai vi goal
noi .
. Vt! setral i ung khi goal cha col i gi ai vangc l ai .


24
VI . Lap t r nh equy vi Pr olog

Chung ta nh l ai rang vi VD2, chung ta acogang netranh cach at van eegi ai
bai toan gi ai tha theo cach nhan don cac sot1 en socan tnh gi atrgi ai tha.
i eu nay sedan en mot i em yeu cua Prol og: khong cung cap cac cau truc i eu
khi en can thi et, dan en vi ec khokhan khi thc hi en phep l ap.

Tuy nhi en v du nay cung cho thay mot kythuat l ap trnh tao nen sc manh chuyeu
cua Prol og: l ap trnh equy. Kythuat nay cung phuhp vi suy nghcua con ngi
khi ti ep can gi ai quyet van evakhi en cho vi ec l ap trnh tren Prol og comot suyen
chuyen vanhe nhang trong vi ec vi et ma. Tuy vay, notao ra mot s khokhan vi
nhng ngi quen l ap trnh thutuc.

Chung ta sexem xet l ai tng bc trong vi ec goi equy e tm ra l i gi ai .

VD13: Xet tng bc quatrnh goi equy vahp nhat cua VD7 vi goal l a
gi ai thua(2,X)

Nhac l ai , chung ta acooan chng trnh nh sau:

pr edi cates
gi ai thua(i nteger ,i nteger )
cl auses
gi ai thua(0,1): -! .
gi ai thua(X,Y): - X1 = X -1, gi ai thua(X1,Y1), Y = X* Y1.

ay comot sthay oi nho: chung ta at nhat cat echuyen ski en au thanh l uat.
Chung ta muon khang nh: neu socan tm gi ai tha l a0 th gi ai tha cua nol a1, va
ket quanay l aduy nhat, khong can phai ti ep tuc tm cac trng hp khac.

Vi goal l agi ai thua(2,X), hethong seso trung vi menh egi ai thua(0,1) l amenh e
au ti en tm thay col i en quan en khai ni em gi ai thua.

Hethong sehp nhat cac thong sotheo tht, 2 hp nhat vi 0 vaX hp nhat vi 1.
Cong vi ec hp nhat X vi 1 thanh cong, X cogi atrl a1, nhng 2 hp nhat vi 0 that
bai .

Hethong seti ep tuc tm ki em l i gi ai khac bang cach so trung vi menh ekhac. Lan
nay hethong so trung goal vi menh egi ai thua(X,Y). Khi tao moi l i en quan gi a cac
thong so, hethong hp nhat 2 vi X cua menh evaY vi X cua goal . Chung ta se
25
kyhi eu X
G
l aX thong socua goal . Do Y vaX
G
eu cha cogi atr, Prol og sexem hai
bi en nay l amot.

Sau ohethong bat au thc hi en tng sub-cl ause:

. X1 = X - 2

X1 l abi en mi , vacha cogi atr. X acogi atrl a2, nen X - 1 cogi atrl a1. Hp
nhat X1 vi 1 ta secogi atrcua X1 l a1.

. gi ai thua(X1,Y1)

ay menh egi ai tha c goi equy. Lu yl uc nay X1 acogi atrl a1, Y1 l a
bi en mi cha cogi atr, v vay nhi em vu cua hethong l atm gi atrcua Y1 sao cho
sub-cl ause gi ai thua(X1,Y1) cho gi atrl aung. Vacung nh cac v dutren, cach thc
Prol og tral i mot sub-cl ause cung tng tnh khi tral i cau hoi tgoal , tc l al ai so
trung cau hoi vi cac menh eabi et

+ So trung vi gi ai thua(0,1), Prol og ti en hanh hp nhat X1 vi 0, Y1 vi 1, do
X1 acogi atr l a1, vi ec hp nhat vi 0 that bai , Prol og phai so trung vi
menh ekhac.

+ So trung vi gi ai thua(X,Y), Prol og ti en hanh hp nhat X1 vi X ong nhat Y1
vi Y. Chung ta kyhi eu X vaY l an goi equy nay l aX
2
vaY
2
, vasdung
cach kyhi eu tng tnh vay cho cac bi en con l ai l an goi equy nay cung
nh cac l an goi equy ti ep theo
.
Nh vay X
2
secogi atrl a1 vaY1 secogi a
trmaY
2
seco.

Tng tl an goi thnhat, cac sub-cl ause cua menh etren l an goi th hai
nay sel an l t c goi :

- X1
2
= X
2
- 1, hp nhat X1
2
vi X
2
-1, ta coX1
2
cogi atrl a0.

- gi ai thua(X1
2,
Y1
2
), X1
2
acogi atrl a0, Prol og setm gi atrcua Y1
2

bang vi ec ti ep tuc so trung gi ai thua(X1
2,
Y1
2
) vi cac menh ecol i en
quan:

. So trung gi ai thua(X1
2,
Y1
2
) vi gi ai thua(0,1). Do X1
2
acogi a
trl a0, Prol og ti en hanh hp nhat X1
2
vi 0 vaY1
2
vi 1. Thc
hi en ti ep sub-cl ause ! , do cau hoi gi ai thua(X1
2,
Y1
2
) cha tm
c cau tral i nao, nen sub-cl ause nay tral i l aung. Vi ec
26
thc hi en menh egi ai thua(0,1) thanh cong, vaY1
2
acogi atr
l a1 nen cau hoi gi ai thua(X1
2,
Y1
2
) acoap so. Vt! sengan
chan vi ec tm cac ap sokhac, v vay tr ong tr ng hp nay,
Pr ol og khong ti ep tuc so tr ung ti ep vi menh egi ai thua(X,Y).

- Y
2
= X
2
* Y1
2
, l uc nay Y
2
cha cogi atr, X
2
vaY1
2
acogi atrl a1
va1 nen Prol og sehp nhat Y
2
va1. Ket quase l aY
2
cogi atrl a1.

Nh vay en ay cac sub-cl ause cua menh egi ai thua(X
2
,Y
2
) athc thi thanh cong,
vaY
2
acogi atrl a1, vav Y1 c ong nhat vi Y
2
, nen Y1 cung secogi atrl a 1

. Y = X* Y1, l uc nay Y cha cogi atr, X vaY1 al an l t cogi atrl a2 va1, nen
Prol og hp nhat Y va2* 1, ket quaY secogi atrl a2.

Nh vay en ay cac sub-cl ause cua menh egi ai thua(X,Y) athc thi thanh cong, va
Y acogi atrl a2, vav X
G
c ong nhat vi Y, nen X
G
cung secogi atrl a 2, va
l i gi ai cua bai toan ac tm thay.

Tom tat :

. equy l asc manh l ap trnh chuyeu tren Prol og
. Moi l an goi equy, cac thong sovabi en cuc botrong moi menh esec tao mi
tng ng vi l an goi equy do.
. Cothedung nhat cat engan chan cac l an goi equy tha khi atm ra ap so

27
VI I . Danh sach t r en Pr olog

Danh sach l aki eu dl i eu cau truc ac bi et tren Prol og. Cothehi eu danh sach nh
mot ki eu day mot chi eu, vaphan tcua danh sach cothethuoc veki eu dl i eu bat
ky, tuy nhi en cac phan ttrong cung mot danh sach phai cung ki eu.

nh ngha kieu danh sach

Ki eu danh sach l amot ki eu dl i eu (user-def i ned type) do ngi dung nh ngha tren
Prol og. Chung ta can phai nh ngha mot ki eu dl i eu danh sach trc khi sdung.
Phan nh ngha ki eu dl i eu mi sec khai bao sau tkhoadomai ns vaat au
chng trnh

VD14: Khai bao mot ki eu dl i eu mi l amot danh sach songuyen tren Prol og coten
l al i st.

domai ns
l i st = i nteger *

Kyhi eu * bi eu hi en cho danh sach. l i st sel aki eu dl i eu danh sach cophan tthuoc
ki eu i nteger .

Cau tr uc cua danh sach

Mot danh sach tren Prol og bao gom hai phan: phan au (head) l aphan tau ti en cua
danh sach vaphan uoi (tai l ) l adanh sach cac phan tcon l ai cua danh sach.

Mot danh sach cothemotatheo hai cach:

i . Li et kecac phan tcua danh sach, v du: [ 1,2,3,4,5]
i i . Motaphan au vaphan uoi cua danh sach, ngan cach bi dau |, v du
[ 1|[ 2,3,4,5] ]

VD15: Motamot danh sach bao gom 5 songuyen l a1,2,3,4,5

Danh sach tren cothemotatheo cac cach sau:

[ 1,2,3,4,5]
[ 1|[ 2,3,4,5] ]
[ 1|[ 2|[ 3,4,5] ] ]
[ 1|[ 2|[ 3|[ 4,5] ] ] ]
28
[ 1|[ 2|[ 3|[ 4|[ 5] ] ] ] ]
[ 1|[ 2|[ 3|[ 4|[ 5|[ ] ] ] ] ] ]

Lu y: danh sach rong cothec motanh sau: [ ]

VD16: Vi et chng trnh i n ra phan au vaphan uoi cua mot danh sach.

Chng trnh nay thc chat chgi up chung ta nhn rohn khai ni em vedanh sach.
Chng trnh c vi et nh sau:

domai ns
l i st = i nteger *
pr edi cates
i ndanhsach(l i st,i nteger ,l i st)
cl auses
i ndanhsach(L,H,T): - L = [ H| T] .

Xet khi chung ta nhap goal vao nh sau:

i ndanhsach([ 1,2,3,4,5] ,X,Y)

Prol og seso trung goal vi menh ei ndanhsach(L,H,T), L c hp nhat vi
[ 1,2,3,4,5] , X c ong nhat vi H, Y c ong nhat vi T.

Khi thc hi en sub-cl ause L = [ H| T] , L c hp nhat vi [ H|T] , nh vay phan au cua
L sehp nhat vi H, phan uoi sehp nhat vi T. Do L acogi atrl a[ 1,2,3,4,5] ,
phan au cua L secogi atrl a1, phan uoi secogi atrl a[ 2,3,4,5] , vay sau khi hp
nhat, H secogi atrl a1 vaL secogi atrl a[ 2,3,4,5] . Cung tc l aX secogi atrl a1
vaY cogi atrl a[ 2,3,4,5] . Prol og atm thay l i gi ai vasei n ra l i gi ai nay.

Lu y:

i . Chng trnh tren sechay sai neu danh sach nhap vao l arong ([ ] ) do l i gi ai cua
chung ta cha xl ytrng hp nay

i i . Phan menh echo vti ndanhsach cothevi et l ai l a
i ndanhsach([ H| T] ,H,T).


Tom tat

29
. Danh sach l aki eu dl i eu cau truc ac bi et do ngi dung nh ngha tren Prol og
. Mot danh sach bao gom hai phan: phan au l aphan tau, phan uoi l adanh sach
cac phan tcon l ai cua danh sach.
. Trong trng hp danh sach rong, phan au cua danh sach sekhong co.

30
VI I I . Lap t r nh equy vi danh sach tr en Pr olog

Khi xl ydanh sach tren Prol og, ngi l ap trnh phai tbophong cach dung vong l ap
exl yday maphai tan dung kythuat equy etm ra l i gi ai .

Chung ta xet mot sov dusau ay:

VD17: Vi et vtem xem mot danh sach cobao nhi eu phan t.

au ti en chung ta phai nh ngha c cong vi ec machung ta nh l am.

Chung ta sevi et mot vtnh sau:

dem(l i st,i nteger )

Chung ta em trong mot danh sach cobao nhi eu phan t. V du khi goi goal
dem([ 1,2,3,4] ,X), ap sosel aX = 4

Ti ep theo chung ta phai xac nh mot thuat gi ai phuhp vi ti nh than cua Prol og.

Khong thedung vong l ap, chung ta phai xay dng mot gi ai thuat equy.

Mot gi ai thuat equy sebao gom hai phan: i eu ki en dng val i goi equy.

i eu ki en dng cho bai toan nay rat dedang: khi danh sach khong cophan tnao, th
hi en nhi en sophan tcua nol a0.

Vay i eu ki en dng sec vi et nh sau:

dem([ ] ,0): -! .

Khi trng hp danh sach khong cophan t nao, ap so0 l aduy nhat, vay chung ta
cothedung nhat cat eyeu cau Prol og khong tm them l i gi ai nao khac.

Phan equy hi khooi vi nhng ai cha quen vi danh sach tren Prol og. Prol og ch
cung cap cho chung ta c chechi a danh sach thanh hai phan: phan tau vaphan
uoi danh sach cac phan tcon l ai . Nh vay l i gi ai gan nh atnohi en ra: chung
ta segoi equy eem phan uoi cobao nhi eu phan troi cong novi 1 (phan t
au) sera sophan ttrong mot danh sach.

Phan nay sec vi et nh sau:
31

dem([ H|T] ,X): - dem(T,X1), X = X1+ 1.

T tng equy ac thehi en rat rorang: em phan uoi T cua danh sach eco
c tong X1, hp nhat X vi X1+1 secho ap socan tm.

Tuy nhi en chung ta thay ay bi en H hoan toan khong can dung trong vephai cua
menh e. Prol og khong coi ay l al oi , nhng se" phan nan" vevi ec nay. Xet vehi eu
qual ap trnh, hoan toan khong can khai bao ten bi en mi cho thanh phan H trong
trng hp nay. Comot nguyen tac enhan ra nhng bi en " vodung" nh vay: ol a
nhng bi en chxuat hi en 1 l an trong suot menh e.

oi vi trng hp nay, ta nen dung kyhi eu '_' thay cho ten bi en ebi eu di en bi en
nay khong can dung trong thuat gi ai .

Vay phan equy sec " ti nh che" nh sau:

dem([ _| T] ,X): - dem(T,X1), X = X1+ 1.

Nh vay toan bochng trnh hoan chnh senh sau:

domai ns
l i st = i nteger *
pr edi cates
dem(l i st,i nteger )
cl auses
dem([ ] ,0): -! .
dem([ _| T] ,X): - dem(T,X1), X = X1+ 1.

VD18: Vi et vttnh tong cac phan ttrong mot danh sach

domai ns
l i st = i nteger *
pr edi cates
tong(l i st,i nteger )
cl auses
tong([ ] ,0): -! .
tong([ H| T] ,X): - tong(T,X1), X = X1+ H.

T duy equy ay l a: chung ta tnh tong phan uoi cua danh sach, roi cong novi
phan tau etnh tong danh sach.
32

VD19: Vi et v tki em tra mot songuyen conam trong danh sach hay khong.

Xac nh van e: chung ta sevi et vtptu(i nteger ,l i st), khi goi ptu(2,[ 1,3,5] ) ket qua
sel aNo, ngc l ai khi goi ptu(3,[ 1,3,5] ), ket quasel aYes.

ay chung ta phai xac nh c cac trng hp mot phan t nam trong mot danh
sach. Vachung ta phai trnh bay c cac khai ni em nay mot cach equy.

Sau ay l aytng cua thuat gi ai : cohai trng hp emot songuyen l aphan tcua
mot danh sach: songuyen nay l aphan tau cua danh sach hoac nol aphan tcua
phan uoi danh sach.

Sau khi xac nh c ytng, chung ta cobai gi ai nh sau:

domai ns
l i st = i nteger *
pr edi cates
ptu(i nteger ,l i st)
cl auses
ptu(H,[ H| _] ): -! .
ptu(H,[ _| T] ): - ptu(H,T).
Lu y:

i ./Chung ta athay thecac bi en chxuat hi en mot l an trong mot menh ebang ky
hi eu '_' nh anoi
i i ./ menh eau acokyhi eu nhat cat, nen neu menh enay ung, bai toan aco
l i gi ai vakhong so trung en menh ethhai . Nh vay menh ethhai chc so
tr ung khi menh ethnhat thay bai , vav menh ethnhat ng vi trng hp so
nguyen can tm bang vi phan tau cua danh sach, nen khi menh ethnhat that
bai , tc l asonguyen can tm khong bang vi phan tau cua danh sach, nen trong
menh e thhai , chung ta khong can quan tam en phan tau cua danh sach.

VD20: Xac nh phan tthn cua danh sach

Khi ta goi ptn([ 1,3,5,7,9] ,2,X) - X = 3 (phan tth2 cua danh sach).

V Prol og chcho chung ta truy xuat phan tau ti en cua danh sach, nen chung ta
phai xay dng thuat gi ai equy da tren c snay: neu n bang 1 th phan tcan tm
l aphan tau cua danh sach, ngc l ai th osel aphan tthn -1 cua phan uoi
danh sach.
33

domai ns
l i st = i nteger *
pr edi cates
ptn(l i st,i nteger ,i nteger )
cl auses
ptn([ H| _] ,1,H): -! .
ptn([ _| T] ,N,X): - N1 = N - 1, ptn(T,N1,X).

VD 21: Tao ra mot danh sach bao gom chcac phan tl ecua danh sach ban au.

Goal khi goi secodang ptl e([ 1,2,3,4,5,6] ,L) L = [ 1,3,5]

i eu ki en dng cua bai toan rat n gi an: khi danh sach l arong th danh sach c
tao ra cung l arong. Vaphan equy cua bai toan phai da tren vi ec truy xuat tphan
tau ti en cua danh sach vagoi equy cho phan uoi . Chung ta phai xet cac trng
hp khac nhau cua phan tau.

domai ns
l i st = i nteger *
pr edi cates
ptl e(l i st,l i st)
cl auses
ptl e([ ] ,[ ] ): -! .
ptl e([ H| T] ,[ H| T1] ): - H mod 2 = 1, ptl e(T,T1),! .
ptl e([ _| T] ,T1): - ptl e(T,T1).

ay chung ta l u yen menh ethba: do hai menh etren eu conhat cat, nen
menh ethba chc so trung khi hai menh etren eu sai . Menh ethhai a
xet trng hp khi H l e, v vay menh ethba chac chan H khong phai l asol e, va
v vay khong can phai xet en


Tom tat :

. equy l acong cuchuyeu exl ydanh sach tren Prol og
. Vi ec goi equy tren danh sach thng da tren c schi a danh sach thanh phan au
vaphan uoi .
. Sdung vtnhat cat hp l ysekhi en cac menh etrnen gon nheval ogi c hn.

34
I X. Danh sach hai chieu

Danh sach hai chi eu l a mot trng hp ac bi et cua danh sach. Phan tcua danh sach
l uc nay cung l a mot danh sach.

Ta xet mot v duvekhai bao danh sach hai chi eu tren Prol og:

VD22: Khai bao danh sach hai chi eu tren Prol og

domains
l i st = i nteger*
l i st2d = l i st*

Nh vay ki eu dl i eu l i st2d l aki eu dl i eu danh sach maphan tcua nothuoc ki eu
l i st, tc l amot danh sach khac.

Vi ec l ap trnh vi danh sach hai hay nhi eu chi eu, vec ban, hoan toan khong khac vi
vi ec l ap tr nh danh sach mot chi eu, tc cung sdung cac gi ai thuat xl ydanh sach
bnh thng. Tuy nhi en chung ta can chuyrang phan tcua danh sach nay cung l a
mot danh sach.

VD23: Vi et chng trnh em tren mot danh sach hai chi eu cua cac songuyen L co
bao nhi eu phan tcon cotong cac phan tl asochan.
Vi bai toan nay, chung ta phai vi et them mot vtphuecoc l i gi ai

domai ns
l i st = i nteger *
l i st2d = l i st*
pr edi cates
tong(l i st,i nteger )
dem(l i st2d,i nteger )
cl auses
tong([ ] ,0): -! .
tong([ H| T] ,X): -tong(T,X1), X = H+ X1.
dem([ ] ,0): -! .
dem([ H|T] ,X): -tong(H,N), N mod 2 = 0, dem(T,X1), X = X1 + 1,! .
dem([ _| T] ,X): - dem(T1,X).




35
Tom tat

. Danh sach nhi eu chi eu l amot danh sach trong ocac phan tcung l adanh sach
. Vemat t duy, l ap trnh exl ytren danh sach nhi eu chi eu khong khac nhi eu vi
xl ydanh sach mot chi eu
. Cac phan tcua danh sach nhi eu chi eu cung l adanh sach, nen cotheap dung cac
gi ai thuat xl ydanh sach exl ycac phan tnay.

Anda mungkin juga menyukai