Tải bản đầy đủ (.pdf) (41 trang)

Chương 4 - Ngôn ngữ Prolog ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (332.99 KB, 41 trang )




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 !”),

×