Chương 4. Ngôn ngữ Prolog
Trần Thọ Châu
Logic Toán. NXB Đại học quốc gia Hà Nội 2007.
Tr 126-165.
Từ khoá: Logic toán, Đại số mệnh đề, Hàm đại số logic, Ngôn ngữ Prolog, Tân
từ Fall, Nhập dữ liệu .
Tài liệu trong Thư viện điện tử ĐH Khoa học Tự nhiên có thể sử dụng cho mục
đích học tập và nghiên cứu cá nhân. Nghiêm cấm mọi hình thức sao chép, in ấn
phục vụ các mục đích khác nếu không được sự chấp thuận của nhà xuất bản và
tác giả.
Chu
.
o
.
ng 4
Ngˆon ng˜u
.
PROLOG
4.1 Mo
.
’
dˆa
`
u 127
4.2 Ngˆon ng˜u
.
PROLOG 131
4.2.1 Qui t˘a
´
cc´uph´ap 131
4.2.2 C´ac kiˆe
’
u dˆo
´
itu
.
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
´
utr´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
.
pd˜u
.
liˆe
.
u 143
4.5.1 Phu
.
o
.
ng th´u
.
c xuˆa
´
td˜u
.
liˆe
.
u 143
4.5.2 Phu
.
o
.
ng th´u
.
c nhˆa
.
pd˜u
.
liˆe
.
u 145
4.6 Mˆo
.
tsˆo
´
th´ı du
.
minh hoa
.
vˆe
`
lˆa
.
ptr`ınh PROLOG 148
4.7 B`ai tˆa
.
p chu
.
o
.
ng4 162
4.1. Mo
.
’
dˆa
`
u 127
4.1 Mo
.
’
dˆa
`
u
Prolog l`a mˆo
.
tkˆ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
.
ucu
’
a Alain Colmerauer ta
.
i tru
.
`o
.
ng da
.
iho
.
c Marseille,
cˆo
.
ng ho`a Ph´ap, v`ao nu
.
’
a
dˆa
`
u thˆa
.
pky
’
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
´
nxu
.
’
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
´
tvˆa
´
n dˆe
`
tr `u
.
utu
.
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ˆon
ng˜u
.
tu
.
.
nhiˆen
• Viˆe
´
t c´ac chu
.
o
.
ng tr`ınh biˆen di
.
ch ngˆon ng˜u
.
• Thiˆe
´
tkˆe
´
cˆa
´
utr´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
´
utr´uc sinh ho´a
•
Diˆe
`
u khiˆe
’
n Robot, Tr´ı tuˆe
.
nhˆan ta
.
o, Hˆe
.
chuyˆen gia v.v
Diˆe
’
mma
.
nh cu
’
a ngˆon ng˜u
.
PROLOG so v´o
.
i ngˆon ng˜u
.
lˆa
.
p tr`ınh truyˆe
`
n
thˆo
´
ng l`a c´ach tiˆe
´
pcˆa
.
n gia
’
i quyˆe
´
tvˆa
´
n dˆe
`
b˘a
`
ng viˆe
.
c mˆo ta
’
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
’
i quyˆe
´
tvˆa
´
n dˆe
`
m`a mˆo
ta
’
logic cu
’
avˆa
´
n dˆe
`
cˆa
`
n gia
’
i quyˆe
´
t.
Prolog du
.
o
.
.
c coi l`a bu
.
´o
.
c th`anh cˆong
dˆa
`
u tiˆen cu
’
alˆa
.
p tr`ınh logic, hu
.
´o
.
ng
dˆa
˜
nviˆe
.
c c`ai d˘a
.
t c´o hiˆe
.
u qua
’
nhiˆe
`
u kh´ıa ca
.
nh thˆong minh cu
’
amˆo
.
tchu
.
o
.
ng
tr`ınh, ch˘a
’
ng ha
.
n: lu
.
.
acho
.
n khˆong tˆa
´
t di
.
nh, xu
.
’
l´y song song, go
.
ithu
’
tu
.
c
khˆong qua tham sˆo
´
(pattern dicected procedure call),
V`ı Prolog tiˆe
´
pcˆa
.
n c´ac vˆa
´
n
dˆe
`
mˆo
.
t c´ach tu
.
.
nhiˆen v`a logic, nˆen nh˜u
.
ng
ngu
.
`o
.
im´o
.
ilˆa
.
p tr`ınh v`a nh˜u
.
ng ngu
.
`o
.
ilˆa
.
p tr`ınh viˆen c´o kinh nghiˆe
.
m dˆe
`
uc´o
128 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
thˆe
’
d`ung n´o dˆe
’
viˆe
´
tnh˜u
.
ng chu
.
o
.
ng tr`ınh ´u
.
ng du
.
ng c´o tˆa
`
mc˜o
.
nhu
.
c´ac hˆe
.
chuyˆen gia, c´ac co
.
so
.
’
tri th ´u
.
c, c´ac giao diˆe
.
nb˘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
’
mma
.
nh cu
’
a Prolog l`a c´ach tiˆe
´
pcˆa
.
n gia
’
i quyˆe
´
tvˆa
´
n dˆe
`
b˘a
`
ng viˆe
.
cmˆo
ta
’
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
’
i
quyˆe
´
tvˆa
´
n
dˆe
`
m`a mˆo ta
’
logic cu
’
avˆa
´
n dˆe
`
cˆa
`
n gia
’
i quyˆe
´
t, ngh˜ıa l`a ngu
.
`o
.
ilˆa
.
p
tr`ınh cˆa
`
n d`anh to`an bˆo
.
s´u
.
clu
.
.
cv`asu
.
.
quan tˆam cu
’
a m`ınh v`ao viˆe
.
c khai b´ao
cho m´ay t´ınh mˆo
.
tsˆo
´
kh˘a
’
ng
di
.
nh cˆa
`
n thiˆe
´
tvˆe
`
c´ac t´ınh chˆa
´
tcu
’
a c´ac dˆo
´
itu
.
o
.
.
ng
trong l˜ınh vu
.
.
c du
.
o
.
.
c dˆe
`
cˆa
.
pv`amˆo
.
tsˆo
´
luˆa
.
t suy diˆe
˜
n, mˆo ta
’
t´ınh chˆa
´
t v`a c´ac
quan hˆe
.
gi˜u
.
a c´ac dˆo
´
itu
.
o
.
.
ng.
Du
.
.
a v`ao viˆe
.
c suy diˆe
˜
n theo c´ac luˆa
.
t, kˆe
´
tho
.
.
pv´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
’
icu
’
avˆa
´
n dˆe
`
.
Ngo`ai ra Prolog cho ph´ep gia
’
i quyˆe
´
t c´ac vˆa
´
n dˆe
`
m`a l`o
.
i gia
’
i l`a khˆong tˆa
´
t di
.
nh
v`a l`am viˆe
.
cv´o
.
i c´ac dˆo
´
itu
.
o
.
.
ng ho`an to`an chu
.
a du
.
o
.
.
cbiˆe
´
t ho˘a
.
cm´o
.
ichı
’
biˆe
´
t
mˆo
.
t phˆa
`
nvˆ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
.
ita
xˆay du
.
.
ng phˆa
`
nmˆe
`
m Turbo-Prolog gi´up cho ngu
.
`o
.
ilˆa
.
p tr`ınh cha
.
y chu
.
o
.
ng
tr`ı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
´
th˜u
.
udu
.
ng v´o
.
inh˜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
.
clˆa
.
pcha
.
y trˆen c´ac m´ay PC, v`a
cho ph´ep dˆe
˜
d`ang truy cˆa
.
p dˆe
´
nbˆo
.
nh´o
.
v`a c´ac cˆo
’
ng v`ao/ra c˜ung nhu
.
c´ac kha
’
n˘ang phˆo
´
iho
.
.
p c´ac chu
.
o
.
ng tr`ınh viˆe
´
tb˘a
`
ng m˜a m´ay v`ao trong
chu
.
o
.
ng tr`ınh Turbo Prolog.
2. Turbo Prolog duy tr`ı tˆen biˆe
´
ncu
’
a riˆeng ngu
.
`o
.
ilˆ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´at
viˆe
.
c thu
.
.
chiˆ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`an
theo mˆo
dun. C´ac mˆodun chu
.
o
.
ng tr`ınh viˆe
´
t trong Turbo Prolog ho˘a
.
c
4.1. Mo
.
’
dˆa
`
u 129
c´ac ngˆon ng˜u
.
kh´ac nhu
.
C, Assembler, c´o thˆe
’
du
.
o
.
.
cnˆo
´
ila
.
iv´o
.
i nhau
th`anh mˆo
.
tchu
.
o
.
ng tr`ınh.
4. C´ac tˆan t`u
.
c´o s˘a
˜
n trong hˆe
.
thˆo
´
ng cho ph´ep su
.
’
du
.
ng c´ac tˆe
.
p truy nhˆa
.
p
tru
.
.
ctiˆe
´
p(random access files).
5. To`an bˆo
.
c´ac thao t´ac t´ınh to´an v´o
.
i c´ac sˆo
´
nguyˆen, sˆo
´
thu
.
.
c, c´ac h`am
lu
.
o
.
.
ng gi´ac c˜ung nhu
.
c´ac thao t´ac bit d`ung dˆe
’
viˆe
´
t c´ac chu
.
o
.
ng tr`ınh
´u
.
ng du
.
ng cho Rob ot v`a diˆe
`
u khiˆe
’
nk˜ythuˆa
.
t, dˆe
`
u du
.
o
.
.
c du
.
a v`ao th`anh
thao t´ac chuˆa
’
ncu
’
ahˆe
.
thˆo
´
ng Turbo Prolog.
Turbo Prolog c´o thˆe
’
du
.
o
.
.
csu
.
’
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
´ytu
.
o
.
’
ng ban
dˆa
`
uc´othˆe
’
du
.
o
.
.
c mˆo h`ınh ho´a nhanh ch´ong b˘a
`
ng Turbo
Prolog v`a cha
.
ythu
.
’
ngay mˆo h`ınh
d´o.
2.
Diˆe
`
u khiˆe
’
n v`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
.
cdi
.
ch ngˆon ng˜u
.
tu
.
.
nhiˆen cu
’
a con ngu
.
`o
.
i, ho˘a
.
cdi
.
ch
t`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
.
nmˆo
.
tchu
.
o
.
ng tr`ınh di
.
ch ngˆon ng˜u
.
viˆe
´
tb˘a
`
ng Turbo Prolog
di
.
ch du
.
o
.
.
c ngˆon ng˜u
.
Basic sang ngˆon ng˜u
.
Ccha
.
y trong hˆe
.
diˆe
`
u h`anh
Unix trˆen m´ay t´ınh HP-9000.
5. Xˆay du
.
.
ng c´ac giao diˆe
.
nb˘a
`
ng ngˆon ng˜u
.
tu
.
.
nhiˆen cho c´ac hˆe
.
thˆo
´
ng phˆa
`
n
mˆe
`
m c´o s˘a
˜
n dˆe
’
c´o thˆe
’
truy cˆa
.
p v`a su
.
’
du
.
ng ch´ung thuˆa
.
nlo
.
.
iho
.
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
.
ov`ach´u
.
ng minh
di
.
nh l´y.
130 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
Chu
.
o
.
ng tr`ınh Prolog bao gˆo
`
m c´ac khai b´ao: su
.
.
khai b´ao n`ay du
.
o
.
.
cta
.
o
th`anh bo
.
’
i3phˆa
`
n:
a) Tˆen v`a cˆa
´
utr´uc cu
’
a c´ac
dˆo
´
itu
.
o
.
.
ng trong b`ai to´an
b) Tˆen c´ac quan hˆe
.
gi˜u
.
a c´ac dˆo
´
itu
.
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
.
.
csu
.
’
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
.
uras˜edu
.
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
.
tchu
.
o
.
ng
tr`ınh Prolog c`on bao gˆo
`
mmˆo
.
t danh s´ach c´ac mˆe
.
nh
dˆe
`
logic ho˘a
.
cda
.
ng c´ac
su
.
.
kiˆe
.
n, ch˘a
’
ng ha
.
n“Hˆom nay tr`o
.
imu
.
a” ho˘a
.
cda
.
ng luˆa
.
t, ch˘a
’
ng ha
.
n“Nˆe
´
u
tr`o
.
imu
.
a m`a ba
.
nquˆen ˆo th`ı ba
.
ns˜eu
.
´o
.
t”.
Prolog c´o thˆe
’
thu
.
.
chiˆ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
˜
nnhu
.
sau:
Jeanette th´ıch Sam
Ba
.
nc˜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
˜
ncu
’
a m`ınh
dˆe
’
t`ım ra tˆa
´
tca
’
c´ac
l`o
.
i gia
’
i c´o thˆe
’
cu
’
a b`ai to´an.
Khi mˆo
.
tchu
.
o
.
ng tr`ınh Prolog du
.
o
.
.
c thu
.
.
chiˆ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
.
tl`o
.
i gia
’
i th`ı quay la
.
ibˆa
´
t
c´u
.
mˆo
.
t gia
’
thiˆe
´
t d˜a x´ac di
.
nh dˆe
’
xem liˆe
.
uc´or´ut ra du
.
o
.
.
cl`o
.
i gia
’
im´o
.
in˜u
.
a
khˆong.
Prolog c´o mˆo
.
tc´u ph´ap rˆa
´
t ng˘a
´
ngo
.
nv`ado
.
n gia
’
n, nˆen dˆe
˜
ho
.
cho
.
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.
4.2. Ngˆon ng˜u
.
PROLOG 131
4.2 Ngˆon ng˜u
.
PROLOG
Theo quan diˆe
’
mcu
’
alˆ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
`
nco
.
ba
’
n sau dˆay:
• Mˆo
.
tba
’
ng ch˜u
.
c´ai (tˆa
.
pc´ack´yhiˆe
.
uco
.
ba
’
ncu
’
a ngˆon ng˜u
.
)
• Tˆa
.
pc´ack´yhiˆe
.
uh˘a
`
ng
• Tˆa
.
pc´ack´yhiˆe
.
ubiˆe
´
n
• Tˆa
.
pc´ack´yhiˆe
.
u h`am
• Tˆa
.
pc´ack´yhiˆ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
´
cc´u ph´ap cu
’
amˆo
.
t ngˆon ng˜u
.
mˆo ta
’
c´ach th´u
.
cgh´ep nˆo
´
ita
.
onˆen
c´ac t`u
.
cu
’
a ngˆon ng˜u
.
.
Thuˆa
.
tng˜u
.
“term”d`ung dˆe
’
chı
’
mˆo
.
t d˜ay c´ac k´yhiˆe
.
uco
.
ba
’
nph`uho
.
.
pv´o
.
i
c´ac qui t˘a
´
cc´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
.
.
cgo
.
i chung l`a cˆa
´
utr´uc.
4.2.2 C´ac kiˆe
’
u dˆo
´
itu
.
o
.
.
ng
4.2.2.1 Ba
’
ng k´y hiˆe
.
uco
.
ba
’
n
132 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
1. Nh´om c´ac k´yhiˆe
.
uviˆe
´
t hoa
ABCDEFGHIJKLM
NOPQRSTUV WXY Z
2. Nh´om c´ac k´yhiˆe
.
uviˆe
´
tthu
.
`o
.
ng
abcdefghijklm
nopqrstuvwxyz
3. Nh´om c´ac ch˜u
.
sˆo
´
0123456789
4. Nh´om c´ac k´yhiˆe
.
u d˘a
.
cbiˆe
.
t
;”#$%& ()
|
|
- ∼
} ][{ + − ; ∗ : <> , . ?
4.2.2.2 C´ac h˘a
`
ng
Trong Prolog c´ac h˘a
`
ng d`ung
dˆe
’
d˘a
.
t tˆen c´ac dˆo
´
itu
.
o
.
.
ng v`a c´ac quan hˆe
.
riˆeng biˆe
.
t, v`a ta cˆa
`
n pha
’
i phˆan biˆe
.
t hai loa
.
ih˘a
`
ng: h˘a
`
ng k´y hiˆe
.
u v`a h˘a
`
ng sˆo
´
.
C´o hai kiˆe
’
uh˘a
`
ng k´yhiˆe
.
u:
–Kiˆe
’
uth´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
`
ub˘a
`
ng mˆo
.
tch˜u
.
viˆe
´
tthu
.
`o
.
ng ch˘a
’
ng ha
.
n: ta
.
ich´u
.
c, c500, john.
–Kiˆe
’
uth´u
.
hai l`a mˆo
.
t d˜ay k´y tu
.
.
bˆa
´
tk`yn˘a
`
mgi˜u
.
a hai dˆa
´
u nh´ay do
.
n,
ch˘a
’
ng ha
.
n ‘hoa lan’, ngo`ai ra dˆa
´
uga
.
ch thˆa
´
p“” du
.
o
.
.
cd`ung dˆe
’
ch`en
v`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
’
uho
.
n nhiˆe
`
u.
C´ac d˜ay k´yhiˆ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
’
udiˆe
˜
nd˜u
.
liˆe
.
usˆo
´
. C´ac thao t´ac t´ınh to´an c´o thˆe
’
du
.
o
.
.
c thu
.
.
chiˆe
.
nv´o
.
ich´ung.
4.2. Ngˆon ng˜u
.
PROLOG 133
Ba
’
ng c´ac miˆe
`
nd˜u
.
liˆe
.
u chuˆa
’
ncu
’
a Prolog
- integer:sˆo
´
nguyˆen t`u
.
- 32768 dˆe
´
n 32767.
- real:sˆo
´
thu
.
.
ccha
.
yt`u
.
±10
−307
dˆe
´
n ±10
+307
- char:k´ytu
.
.
du
.
o
.
.
cviˆe
´
t trong hai dˆa
´
u nh´ay
do
.
n, ch˘a
’
ng ha
.
n: ‘a
, ‘b
, ‘c
- string: xˆau k´ytu
.
.
du
.
o
.
.
cviˆe
´
tgi˜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
.
ik´yhiˆe
.
u
1. D˜ay c´ac ch˜u
.
, c´ac sˆo
´
v`a dˆa
´
uga
.
ch thˆa
´
p. D˜ay n`ay pha
’
ib˘a
´
t dˆa
`
u
b˘a
`
ng mˆo
.
tch˜u
.
viˆe
´
tthu
.
`o
.
ng, ch˘a
’
ng ha
.
n: anh em.
2. D˜ay k´ytu
.
.
n˘a
`
mgi˜u
.
ac˘a
.
pdˆa
´
u nh´ay k´ep ch˘a
’
ng ha
.
n: “DR no”,
“Hanoi”, v.v
Ch´u ´y: Symbol (k´y hiˆe
.
u) v`a string (xˆau) c´o thˆe
’
su
.
’
du
.
ng thay cho nhau,
nhu
.
ng ch´ung du
.
o
.
.
cxu
.
’
l´y kh´ac nhau.
4.2.2.3 C´ac biˆe
´
n
Biˆe
´
n pha
’
ib˘a
´
t
dˆa
`
ub˘a
`
ng mˆo
.
tch˜u
.
viˆe
´
t hoa ho˘a
.
cmˆo
.
tdˆa
´
uga
.
ch thˆa
´
p“”
(du
.
o
.
.
cgo
.
i l`a biˆe
´
n vˆo danh anonymous variable). Biˆe
´
n vˆo danh c´o mˆo
.
t t´ınh
chˆa
´
trˆa
´
t d˘a
.
cbiˆe
.
t l`a n´o c´o thˆe
’
k´yhiˆe
.
u cho mo
.
i dˆo
´
itu
.
o
.
.
ng, v`ı thˆe
´
n´o c´o thˆe
’
du
.
o
.
.
csu
.
’
du
.
ng v`ao bˆa
´
tk`ychˆo
˜
n`ao m`a mˆo
.
tbiˆe
´
n kh´ac c´o thˆe
’
d`ung
du
.
o
.
.
c,
nhu
.
ng khˆong cˆa
`
n nhˆa
.
nmˆo
.
t gi´a tri
.
cu
.
thˆe
’
.
Ch´u ´y: Ta cˆa
`
n phˆan biˆe
.
t hai loa
.
ibiˆe
´
n
• Biˆe
´
ntu
.
.
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.
Th´ı du
.
4.2.1
134 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
domains
person, hobby=symbol
predicates
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 solutions
trong
d´o X du
.
o
.
.
c xem l`a biˆe
´
ntu
.
.
do g˘a
´
nliˆe
`
nv´o
.
i quan hˆe
.
cu
’
alu
.
o
.
.
ng t`u
.
to`an
thˆe
’
∀, c`on reading du
.
o
.
.
c xem l`a r`ang buˆo
.
cg˘a
´
nliˆe
`
nv´o
.
i quan hˆe
.
cu
’
alu
.
o
.
.
ng
t`u
.
tˆo
`
nta
.
i ∃.
4.2.2.4 C´ac cˆa
´
utr´uc
Cˆa
´
utr´uc l`a loa
.
i term th´u
.
3 (thu
.
`o
.
ng du
.
o
.
.
cgo
.
il`abiˆe
´
n h`am f) du
.
o
.
.
csu
.
’
du
.
ng trong chu
.
o
.
ng tr`ınh Prolog.
Mˆo
.
tcˆa
´
utr´uc l`a mˆo
.
t dˆo
´
itu
.
o
.
.
ng do
.
n du
.
o
.
.
cta
.
onˆen t`u
.
mˆo
.
ttˆa
.
pho
.
.
p c´ac dˆo
´
i
tu
.
o
.
.
ng kh´ac go
.
i l`a c´ac th`anh phˆa
`
n. C´ac th`anh phˆa
`
n du
.
o
.
.
cliˆen kˆe
´
tv´o
.
i nhau
trong mˆo
.
tcˆa
´
utr´uc dˆe
’
c´o thˆe
’
xu
.
’
l´y ch´ung mˆo
.
t c´ach thuˆa
.
ntiˆe
.
n v`a thˆo
´
ng
nhˆa
´
t.
Mˆo
.
tcˆa
´
utr´uc
du
.
o
.
.
cviˆe
´
t trong c´u ph´ap Prolog b˘a
`
ng c´ach mˆo ta
’
tˆen du
.
o
.
.
c
go
.
il`a“functor”cu
’
acˆa
´
utr´uc, sau d´o mˆo ta
’
c´ac th`anh phˆa
`
n. C´ac th`anh phˆa
`
n
n`ay du
.
o
.
.
cviˆ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.
Th´ı du
.
4.2.2
co(john, sach(
doi gio hu, ten tac gia(emily, brownte)))
4.2. Ngˆon ng˜u
.
PROLOG 135
/* John c´o quyˆe
’
n s´ach “Dˆo
`
igi´oh´u” cu
’
a t´ac gia
’
Emily Brownte*/
Cˆa
´
utr´uc s´ach l`a mˆo
.
t
dˆo
´
icu
’
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
´
itu
.
o
.
.
ng do
.
n.
Viˆe
.
cbiˆe
’
udiˆe
˜
n c´ac chu
.
o
.
ng tr`ınh Prolog nhu
.
l`a c´ac cˆa
´
utr´uc functor ( )
c´o rˆa
´
t nhiˆe
`
uu
.
u diˆe
’
m, v`ır˘a
`
ng c´o thˆe
’
thao t´ac c´ac th`anh phˆa
`
ncu
’
amˆo
.
t chu
.
o
.
ng
tr`ınh mˆo
.
t c´ach thˆo
´
ng nhˆa
´
tb˘a
`
ng mˆo
.
tsˆ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
´
utr´uc v`ao trong mˆo
.
t kh´ai niˆe
.
m
chung du
.
o
.
.
cgo
.
il`a“object”(dˆo
´
itu
.
o
.
.
ng) cu
’
a Prolog du
.
a dˆe
´
nmˆo
.
tu
.
u diˆe
’
ml´o
.
n
l`a n´o cho ph´ep ngu
.
`o
.
ilˆa
.
p tr`ınh di
.
nh ngh˜ıa kiˆe
’
ud˜u
.
liˆe
.
um´o
.
icu
’
a m`ınh, ngo`ai
nh˜u
.
ng kiˆe
’
ud˜u
.
liˆe
.
u chuˆa
’
ncu
’
a ngˆon ng˜u
.
,rˆo
`
i khai b´ao ch´ung v´o
.
i chu
.
o
.
ng tr`ınh
biˆ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
´
utr´uc d˜u
.
liˆe
.
ub˘a
`
ng co
.
chˆe
´
dˆo
´
i s´anh dˆo
´
itu
.
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
´
ccu
’
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
´
i
tu
.
o
.
.
ng b˘a
`
ng nhau.
Th´ı du
.
4.2.3 Vˆe
`
viˆe
.
csu
.
’
du
.
ng co
.
chˆe
´
dˆo
`
ng nhˆa
´
t ho´a trong Turbo Prolog:
136 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
domains
ten
sach, tac gia=symbol
so trang=integer
xuat 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 sach):-
viet boi( , sach(Ten sach, So trang)),
So trang>300.
Sau
dˆay l`a mˆo
.
tsˆo
´
cˆau ho
’
i v`a tra
’
l`o
.
i:
• Goal: viet
boi (X, Y) ←
X=flemming, Y =sach(“DR NO”, 210)
X=melville, Y =sach(“X30” , 600)
2 solutions
• Goal: viet
boi(X, sach(“X30”, Y)) ←
X= melville, Y =600
1 solution
• Goal: tieu
thhuyet dai(X) ←
X=X30
1 solution
4.2.2.5 Danh s´ach (List)
Danh s´ach l`a mˆo
.
tcˆa
´
utr´uc d ˜u
.
liˆe
.
uco
.
ba
’
ncu
’
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
.
4.2. Ngˆon ng˜u
.
PROLOG 137
l`a mˆo
.
t dˆo
´
itu
.
o
.
.
ng ph´u
.
cho
.
.
p, v`a du
.
o
.
.
cviˆe
´
tnhu
.
sau: [X
|
|
Y ], trong d´o X l`a
phˆa
`
n
dˆa
`
u cu
’
a danh s´ach, c`on Y l`a phˆa
`
n duˆoi cu
’
a danh s´ach, dˆa
´
u
|
|
l`a dˆa
´
u
phˆan c´ach.Tˆa
.
prˆo
˜
ng
du
.
o
.
.
ck´yhiˆe
.
ul`a[].
Th´ı du
.
4.2.4
- [dog, cat, canary]
- [“Mary”, “John”]
Danh s´ach gˆa
`
n giˆo
´
ng tˆa
.
pho
.
.
p, tuy nhiˆen c´ac phˆa
`
ntu
.
’
trong danh s´ach c´o
thˆe
’
giˆo
´
ng nhau, ch˘a
’
ng ha
.
n: [1, 2, 3, 2]
Th´ı du
.
4.2.5
domains
ilist=interger*
predicates
headtail (ilist)
clauses
headtail (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
4.2.3.1 C´ac ph´ep to´an sˆo
´
ho
.
c v`a kiˆe
’
u to´an tu
.
’
Ba
’
ng c´ac kiˆe
’
ucu
’
a to´an ha
.
ng v`a kˆe
´
t qua
’
138 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
To´an ha
.
ng 1 To´an tu
.
’
To´an ha
.
ng 2 Kˆe
´
t qua
’
integer +, -, * integer integer
integer +, -, * real real
real +, -, * integer real
real +, -, * real real
integer or real / integer or real real
integer div integer integer
integer mod integer integer
4.2.3.2 C´ac quan hˆe
.
Ba
’
ng quan hˆe
.
nhu
.
sau
C´ach viˆe
´
t Quan hˆe
.
< nho
’
ho
.
n
<= nho
’
ho
.
n ho˘a
.
cb˘a
`
ng
=b˘a
`
ng
>=l´o
.
nho
.
n ho˘a
.
cb˘a
`
ng
<> hay >< kh´ac nhau
4.2.3.3 C´ac h`am chuˆa
’
n
- abs(x) cho gi´a tri
.
tuyˆe
.
t dˆo
´
icu
’
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ˆong
pha
’
i l`a sˆo
´
nguyˆen l´o
.
n nhˆa
´
t nho
’
ho
.
n ho˘a
.
cb˘a
`
ng x,dˆa
´
u l`a dˆa
´
ucu
’
a x.
Th´ı du
.
4.2.6 round(-3.2)=-3.
- trunc(x) dˆo
´
il`asˆo
´
thu
.
.
c, kˆe
´
t qua
’
l`a bo
’
phˆa
`
n thˆa
.
p phˆan sau dˆa
´
uchˆa
´
m.
4.2.3.4 C´ac ph´ep to´an logic
<AND>=
def
and
|
|
,
<OR>=
def
or
|
|
;
O
.
’
dˆay dˆa
´
u,
|
|
, thay cho “hay l`a”
4.3. Cˆa
´
utr´uc cu
’
a chu
.
o
.
ng tr`ınh PROLOG 139
4.3 Cˆa
´
utr´uc cu
’
achu
.
o
.
ng tr`ınh PROLOG
Chu
.
o
.
ng tr`ınh Prolog c´o phˆa
`
n duˆoi mo
.
’
rˆo
.
ng l`a .PRO v`a thu
.
`o
.
ng du
.
o
.
.
ccˆa
´
u
ta
.
obo
.
’
i 3 ho˘a
.
c4phˆa
`
nco
.
ba
’
nl`adomains, predicates, clauses v`a goal (phˆa
`
n
goal c´o thˆe
’
bo
’
di khi cha
.
y chu
.
o
.
ng tr`ınh trong cu
.
’
asˆo
’
Dialog – m´ay yˆeu cˆa
`
u
cho biˆe
´
t Goal:-? )
Qua mˆo
.
tsˆo
´
th´ı du
.
trˆen, ta
d˜a phˆa
`
n n`ao l`am quen v´o
.
imˆo
.
tchu
.
o
.
ng tr`ınh
viˆe
´
tb˘a
`
ng Prolog.
• Phˆa
`
n domains
Dˆay l`a phˆa
`
n khai b´ao kiˆe
’
ucu
’
a c´ac dˆo
´
isˆo
´
trong c´ac tˆan t`u
.
cu
’
achu
.
o
.
ng
tr`ınh. Tru
.
`o
.
ng ho
.
.
p c´ac tˆan t`u
.
du
.
o
.
.
cviˆe
´
tdu
.
´o
.
ida
.
ng khai b´ao kiˆe
’
u dˆo
´
i
tu
.
o
.
.
ng tru
.
.
ctiˆe
´
p th`ı phˆa
`
n domains khˆong cˆa
`
n khai b´ao.
• Phˆa
`
n predicates
Nˆe
´
u trong phˆa
`
n clauses ta c´o su
.
’
du
.
ng tˆan t`u
.
n`ao th`ı pha
’
i khai b´ao,
tr `u
.
c´ac tˆan t`u
.
chuˆa
’
n c´o s˘a
˜
nnhu
.
write, nl, fail v`a trˆen mˆo
˜
i d`ong mˆo
.
t
tˆan t`u
.
.
• Phˆa
`
n clauses
Dˆay l`a c´ac su
.
.
kiˆe
.
n v`a luˆa
.
t m`a m´ay pha
’
i tuˆan theo dˆe
’
thoa
’
m˜an phˆa
`
n
goal (d´ıch).
• Phˆa
`
n goal
Nˆe
´
u goal viˆe
´
ts˘a
˜
n trong chu
.
o
.
ng tr`ınh th`ı n´o du
.
o
.
.
cgo
.
il`agoal nˆo
.
i, c`on
khˆong th`ı cha
.
yta
.
icu
.
’
asˆo
’
Dialog go
.
il`agoal ngoa
.
i.
Goal: -
Con tro
’
- nhˆa
´
p nh´ay ch`o
.
ngu
.
`o
.
id`ung d´anh v`ao goal ngoa
.
i, v`a bˆa
´
m
Enter s˜e cho kˆe
´
t qua
’
.
Ch´u ´y: Goal nˆo
.
i v`a goal ngoa
.
i kh´ac nhau o
.
’
chˆo
˜
: goal ngoa
.
i cho tˆa
´
tca
’
c´ac
l`o
.
i gia
’
i, c`on goal nˆo
.
i khi d˜a da
.
t du
.
o
.
.
cmˆo
.
tl`o
.
i gia
’
irˆo
`
ith`ıd`u
.
ng. V`ıthˆe
´
khi
140 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
d`ung goal nˆo
.
i m`a muˆo
´
n c´o mo
.
il`o
.
i gia
’
i, ta d`ung thˆem tˆan t`u
.
fail (xem mu
.
c
sau) o
.
’
cuˆo
´
ic`ung trong goal nˆo
.
i.
Ngo`ai c´ac phˆa
`
n trˆen, c`on c´o thˆe
’
thˆem c´ac phˆa
`
n sau:
• Phˆa
`
n database (co
.
so
.
’
d˜u
.
liˆe
.
u) du
.
o
.
.
c d˘a
.
t tru
.
´o
.
cv`ung predicates, v`a
pha
’
ichı
’
r˜o nh˜u
.
ng tˆan t`u
.
n`ao liˆen quan dˆe
´
nco
.
so
.
’
d˜u
.
liˆe
.
u dˆe
`
u pha
’
i khai
b´ao dˆa
`
y du
’
o
.
’
v`ung n`ay.
Th´ı du
.
4.3.1 database
person(name, address, age)
• Phˆa
`
n constants cho tˆen v`a gi´a tri
.
c´ac h˘a
`
ng sˆo
´
,
du
.
o
.
.
c khai b´ao tru
.
´o
.
c
v`ung predicates.
Th´ı du
.
4.3.2 constants
pi=3.141592653
ega=3
Tru
.
´o
.
c khi di
.
ch chu
.
o
.
ng tr`ınh Turbo Prolog thay thˆe
´
mˆo
˜
ih˘a
`
ng (viˆe
´
t
du
.
´o
.
ida
.
ng mˆo
.
tchuˆo
˜
ich˜u
.
pi, ega ) b˘a
`
ng gi´a tri
.
cu
’
a n´o.
• Phˆa
`
n chı
’
thi
.
di
.
ch
- Trace: yˆeu cˆa
`
ucha
.
ychu
.
o
.
ng tr`ınh t`u
.
ng bu
.
´o
.
c theo vˆe
´
t, v`a chı
’
thi
.
trace n`ay viˆe
´
tlˆen trˆen c`ung cu
’
a chu
.
o
.
ng tr`ınh.
- Nowarnings: yˆeu cˆa
`
u khˆong cho warnings (nh˘a
´
c nho
.
’
) khi mˆo
.
tbiˆe
´
n
chı
’
xuˆa
´
thiˆe
.
nmˆo
.
tlˆa
`
n,
dˆay c´o thˆe
’
l`a mˆo
.
tlˆo
˜
i pha
’
isu
.
’
a ho˘a
.
c c´o thay
b˘a
`
ng biˆe
´
n vˆo danh, ho˘a
.
cbˆa
´
m F10
dˆe
’
bo
’
qua.
• Phˆa
`
n include “filename”
-Yˆeu cˆa
`
u khi cha
.
y, Turbo Prolog
du
.
a thˆem v`ao mˆo
.
ttˆe
.
p tin c´o s˘a
˜
n
trong ˆo
’
d˜ıa A:, B:, C:,
Th´ı du
.
4.3.3 include “A:\ Grapdecl. Pro”
4.4. Tˆan t`u
.
FAIL, nh´at c˘a
´
t (!) v`a tˆan t`u
.
NOT 141
4.4 Tˆan t`u
.
FAIL, nh´at c˘a
´
t (!) v`atˆan t`u
.
NOT
4.4.1 Tˆan t`u
.
fail yˆeu cˆa
`
u Turbo Prolog sau khi t`ım du
.
o
.
.
cmˆo
.
tl`o
.
i gia
’
i pha
’
i
quay vˆe
`
dˆe
’
t`ım c´ac l`o
.
i gia
’
i kh´ac.
Fail l`a mˆo
.
t tˆan t`u
.
luˆon luˆon sai nh˘a
`
m gˆay hiˆe
.
u´u
.
ng backtracking (quay
lui).
Th´ı du
.
4.4.1 /*builds.Pro*/
predicates
builds(symbol, symbol).
clauses
builds(an, houses).
builds(ba, computers).
builds(cong, tables).
builds(dung, computers).
goal
builds(X, computers), write(X), nl, fail.
Khi cha
.
y chu
.
o
.
ng tr`ınh ta c´o kˆe
´
t qua
’
o
.
’
cu
.
’
asˆo
’
Dialog:
ba
dung
2 solutions
Ch´u ´y: nl l`a viˆe
´
tt˘a
´
tcu
’
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
.
c
n´o. Ta d `ung nh´at c˘a
´
t khi muˆo
´
nchı
’
c´o mˆo
.
tl`o
.
i gia
’
i trong goal ngoa
.
i.
Th´ı du
.
4.4.2 /*Buy car.pro*/
142 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
predicates
buy
car(symbol, symbol)
car(symbol, symbol, interger)
color(symbol)
clauses
buy car(Model, Color):-
car(Mo del, Color, Price),
color(Color), !,
Price <= 25000.
car(toyota, green, 23000).
car(datsun, blue, 24000).
car(mazda, red, 25000).
color(red).
color(blue).
color(green).
-Nˆe
´
ucha
.
y chu
.
o
.
ng tr`ınh theo goal ngoa
.
i
Goal: buy
car(X, Y) ←
th`ı ta
du
.
o
.
.
ckˆe
´
t qua
’
trˆen cu
.
’
asˆo
’
Dialog:
X=toyota Y =green
1 solution
-Nˆe
´
utabo
’
nh´at c˘a
´
t!v`ac˜ung cha
.
y theo goal ngoa
.
i
Goal: buy
car(X, Y) ←
th`ı ta
du
.
o
.
.
ckˆe
´
t qua
’
trˆen cu
.
’
asˆo
’
Dialog:
X=toyota Y =green
X=datsun Y =blue
X=mazda Y =red
3 solutions
4.4.3 Tˆan t`u
.
NOT phu
’
di
.
nh dˆo
´
isˆo
´
d´u
.
ng sau n´o.
4.5. Phu
.
o
.
ng th´u
.
c xuˆa
´
t nhˆa
.
pd˜u
.
liˆe
.
u 143
Th´ı du
.
4.4.3 /*Darling.pro*/
predicates
male(symbol)
smoker(symbol)
sophie
could darling(symbol)
clauses
male(“John”).
male(“Tom”).
male(“Bill”).
smoker(“Mary”).
smoker(“Tom”).
sophie
could darling(X):-
male(X), not(smoker(X)).
goal
sophie
could darling(X),
write(“A possible darling for Sophie is”, X), nl, fail
Khi cha
.
y chu
.
o
.
ng tr`ınh ta thu du
.
o
.
.
ckˆe
´
t qua
’
:
A possible darling for Sophie is John
A possible darling for Sophie is Bill
2 solutions
4.5 Phu
.
o
.
ng th ´u
.
cxuˆa
´
tnhˆa
.
pd˜u
.
liˆe
.
u
4.5.1 Phu
.
o
.
ng th´u
.
c xuˆa
´
td˜u
.
liˆe
.
u
-Tad`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
´
isˆo
´
Arg1, Arg2, ArgN l`a nh˜u
.
ng xˆau ho˘a
.
cbiˆe
´
n, h˘a
`
ng.
144 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
Th´ı du
.
4.5.1 /*Write.pro*/
constants
a=10
goal
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
´
iph´u
.
cta
.
p. Formatstring bao gˆo
`
mnh˜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
´
uga
.
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
.
utr˜u
.
.
- p chı
’
sˆo
´
c´ac ch˜u
.
sˆo
´
thˆa
.
p phˆan sau dˆa
´
uchˆa
´
m.
- f cho ph´ep in gi´a tri
.
da
.
ng khuˆon chuˆa
’
n.
Th´ı du
.
4.5.2 /* Writef. pro*/
Goal
A=one
B=432.7685
writef(“A=’ % -8’ \ B=’% 10.2e’ \ n” , A, B),
writef(“%% c” , 4, 4).
Khi cha
.
y chu
.
o
.
ng tr`ınh ta c´o kˆe
´
t qua
’
l`a:
A =‘one
B =‘4.33E +02
4
4.5. Phu
.
o
.
ng th´u
.
c xuˆa
´
t nhˆa
.
pd˜u
.
liˆe
.
u 145
4.5.2 Phu
.
o
.
ng th´u
.
c nhˆa
.
pd˜u
.
liˆe
.
u
Tac´o5tˆant`u
.
nhˆa
.
pd˜u
.
liˆe
.
u chuˆa
’
n sau dˆay:
- readln(X)biˆe
´
n X c´o kiˆe
’
u xˆau ho˘a
.
ckiˆe
’
uk´ytu
.
.
.
- readint(X)biˆe
´
n X thuˆo
.
ckiˆe
’
u interger
- readreal (X)biˆe
´
n X thuˆo
.
ckiˆe
’
u real
- readchar(X)biˆe
´
n X thuˆo
.
ckiˆe
’
u char
- readterm(<tˆen>, TermParam), trong
d´o <tˆen> l`a tˆen cu
’
amiˆe
`
n dˆo
´
itu
.
o
.
.
ng.
Th´ı du
.
4.5.3
domains /*miˆe
`
n dˆo
´
itu
.
o
.
.
ng*/
ten, dia chi=string
muc du lieu=p(ten, dia chi)
Khi d´o tˆan t`u
.
readterm c´o thˆe
’
do
.
cbˆa
´
tk`y dˆo
´
itu
.
o
.
.
ng n`ao du
.
o
.
.
c ghi v`ao
file nh`o
.
write:
readterm(muc du lieu, p(Ten, Dia chi)).
Dˆe
’
xu
.
’
l´y tˆe
.
p trong Turbo Prolog, ta hay d`ung mˆo
.
tsˆo
´
tˆan t`u
.
chuˆa
’
n sau
dˆay:
- openread(SymbolicFileName, DosFileName), trong
d´o SymbolicFileName
l`a tˆe
.
p tin m`a ta d˘a
.
ttˆen, ch˘a
’
ng ha
.
n myfile, c`on DosFileName l`a tˆe
.
p tin
m`a ta mo
.
’
dˆe
’
do
.
cv`atˆe
.
p n`ay pha
’
ic´os˘a
˜
n trong d˜ıa ho˘a
.
co
.
’
ˆo
’
d˜ıa n`ao
d´o, ch˘a
’
ng ha
.
n:
domains
file=myfile
Khi
d´o trong chu
.
o
.
ng tr`ınh ta su
.
’
du
.
ng tˆan t`u
.
openread du
.
o
.
.
cviˆe
´
tnhu
.
sau:
Goal
openread(mylife, “a:\ bai
hat.text” ),
146 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
- openwrite(SymbolicFileName, DosFileName),
trong
d´o DosFilename l`a tˆen tˆe
.
pm´o
.
i ta mo
.
’
dˆe
’
viˆe
´
t. Nˆe
´
u tˆen tˆe
.
pm´o
.
i
d˘a
.
ttr`ung tˆen tˆe
.
pc˜uth`ıtˆe
.
pc˜us˜ebi
.
viˆe
´
t d`e lˆen.
Th´ı du
.
4.5.4 domains
file=myfile
goal
openwrite(mylife, “c:\nhac\muathu.txt”),
closefile(myfile),
file
str(“c:\nhac\muathu.text”),
display(Str).
- openappend(SymbolicFileName, DosFileName) l`a tˆan t`u
.
d`ung dˆe
’
mo
.
’
mˆo
.
t
tˆe
.
p tin v`a thˆem v`ao cuˆo
´
itˆe
.
p tin v`u
.
amo
.
’
,ch˘a
’
ng ha
.
n:
domains
file=myfile
goal
openappend(myfile, “c:\nhac\muthu.txt”)
writedevice(myfile),
write(“\Chao mua thu Ha-Noi” ),
closefile(myfile),
file
str(“c:\nhac\muthu.text” ),
display(Str).
- openmodify(SymbolicFileName, DosFileName) l`a tˆan t`u
.
d`ung dˆe
’
mo
.
’
mˆo
.
t
tˆe
.
p tin v`a su
.
’
a
dˆo
’
i.
4.5. Phu
.
o
.
ng th´u
.
c xuˆa
´
t nhˆa
.
pd˜u
.
liˆe
.
u 147
Th´ı du
.
4.5.5 domains
file=myfile
goal
openmodify(myfile, “c:\nhac\muthu.text” ),
readdevice(myfile), readln(
),
filepos(myfile, FilePos, 0)
writedevice(myfile),
filepos(myfile, FilePos, 0),
write(“Tra lai cho toi nhung ngay ngay tho” ),
closefile(myfile),
file
str(“muthu.text”, Str),
display(Str).
Trong c´ac th´ı du
.
trˆen ta su
.
’
du
.
ng thˆem mˆo
.
tsˆo
´
tˆan t`u
.
m´o
.
i:
- readdevice(SymbolicFileName) d`ung
dˆe
’
x´ac di
.
nh la
.
i thiˆe
´
tbi
.
do
.
chiˆe
.
n h`anh
dˆo
´
iv´o
.
itˆe
.
p tin SymbolicFileName.
- writedevice(SymbolicFileName) d`ung dˆe
’
x´ac di
.
nh la
.
i thiˆe
´
tbi
.
viˆe
´
t dˆo
´
iv´o
.
i
tˆe
.
p tin SymbolicFileName.
- closefile(SymbolicFileName) d`ung dˆe
’
d´ong tˆe
.
p tin SymbolicFileName.
- file
str(DosFileName, StringVariable) d `ung dˆe
’
do
.
c ho˘a
.
c dˆe
’
viˆe
´
tmˆo
.
ttˆe
.
p
tin trˆen
d˜ıa do biˆe
´
n StringVariable m`a ta thu
.
`o
.
ng d˘a
.
t ng˘a
´
ngo
.
n l`a Str.
- filepos(SymbolicFileName, FilePosition, Mode) d`ung
dˆe
’
cho
.
nvi
.
tr´ı cu
’
a
SymbolicFileName
dˆe
’
cho tˆe
.
p tin m´o
.
i thay v`ao. Vi
.
tr´ı n`ay tu`y thuˆo
.
c
v`ao Mode. O
.
’
dˆay Mode c´o 3 chˆe
´
dˆo
.
:
+ Mode=0: phˆa
`
nb˘a
´
t dˆa
`
ucu
’
atˆe
.
p tin
+ Mode=1: vi
.
tr´ı hiˆe
.
n h`anh
+ Mode=2: phˆa
`
n cuˆo
´
itˆe
.
p tin.
- display (String Variable) l`a tˆan t`u
.
d`ung dˆe
’
hiˆe
.
nmˆo
.
t xˆau lˆen m`an h`ınh.
148 Chu
.
o
.
ng 4. Ngˆon ng˜u
.
PROLOG
4.6 Mˆo
.
tsˆo
´
th´ı du
.
minh hoa
.
vˆe
`
lˆa
.
ptr`ınh
PROLOG
Th´ı du
.
4.6.1 Cˆa
.
p nhˆa
.
pd˜u
.
liˆe
.
u
/*LAP1-DOC.PRO*/
/* LAP-DOC.PRO
Lap va Doc mot tep CSDL trong PROLOG2.0 ve mot
CO SO DU LIEU QUAN HE
*/
domains
name,address,gender=string
age=integer
file=myfile
database
person(name,age,address,gender)
predicates
run
repfile(file)
laptep
doctep
thoat
demo
clauses
/*Lap mot TEP*/
4.6. Mˆo
.
tsˆo
´
th´ı du
.
minh hoa
.
vˆe
`
lˆa
.
p tr`ınh PROLOG 149
laptep:-write(”Up date the Database (Tentep.DAT):”),
readln(Tentep),nl,
/*
Truoc khi tao lap Tep
Moi,them dau % truoc consult(), sau do
quay lai cap nhat. Va muon them du lieu vao tep vua cap
nhat thi hay bo dau % , neu khong du lieu sau se de len du
lieu cu
*/
%consult(Tentep),
run,
save(Tentep).
run:-write(”Khong muon nhap nua, An ENTER !”),nl,
write(“Name ?”), readln(Name), Name<>””,
write(“Age ?”),readint(Age),
write(“Address ?”),readln(Address),
write(“Gender ?”),readln(Gender),
assertz(p erson(Name,Age,Address,Gender)),run,nl.
run.
/*Doc mot TEP*/
repfile(
).
repfile(F):-not(eof(F)),repfile(F).
doctep:-write(”Ban doc tep nao(Tentep.DAT) ?”),
readln(Tentep),
openread(myfile,Tentep),
readdevice(myfile),repfile(myfile),
readln(L),write(L),nl,fail.
demo:-write(”Ban LAP: An 1; DOC: An 2; THOAT: An 0 !”),