Tài liệu Lập trình Prolog_chương 1-2-3 - Pdf 98


LÅÌI NỌI ÂÁƯU
Cún sạch ny nhàòm cung cáúp cå såí l thuút v cạc phỉång phạp
láûp trçnh cå bn nháút ca män hc
«
Láûp trçnh lägich
»
(Programming in Logic).
Ngỉåìi âc s âỉåüc lm quen våïi mäüt säú k thût láûp trçnh lägich âỉåüc ỉïng dủng
tỉång âäúi phäø biãún v ch úu trong lénh vỉûc trê tû nhán tảo (Artificial
Intelligence) nhỉ cäng nghãû xỉí l tri thỉïc, mạy hc, hãû chun gia, xỉí l ngän
ngỉỵ tỉû nhiãn, tr chåi, v.v
Cún sạch gäưm nàm chỉång v phủ lủc nhỉ sau :
− Chỉång 1 giåïi thiãûu ngän ngỉỵ láûp trçnh Prolog lägich dỉûa trãn lägich
Horn (Horn logic). Ngỉåìi âc lm quen våïi cạc kiãøu dỉỵ liãûu ca Prolog,
khại niãûm vãư lût, sỉû kiãûn v viãút cạc chỉång trçnh Prolog âån gin.
− Chỉång 2 trçnh by cạc mỉïc nghéa khạc nhau ca mäüt chỉång trçnh
Prolog : nghéa lägich, nghéa khai bạo v nghéa th tủc, cạch Prolog tr
låìi cạc cáu hi, cạch lm tho mn âêch.
− Chỉång 3 trçnh by cạc phẹp toạn säú hc, phẹp so sạnh v âënh nghéa
hm sỉí dủng phẹp âãû quy trong Prolog.
− Chỉång 4 trçnh by cáúu trục danh sạch v cạc phẹp xỉí l cå bn trãn
danh sạch ca Prolog.
− Chỉång 5 trçnh by k thût láûp trçnh náng cao våïi Prolog.
− Pháưn phủ lủc giåïi thiãûu ngän ngỉỵ láûp trçnh SWI-Prolog, hỉåïng dáùn
cạch ci âàût sỉí dủng pháưn mãưm ny v mäüt säú chỉång trçnh vê dủ tiãu
biãøu viãút trong SWI Prolog.
Cún sạch ny dng lm giạo trçnh cho sinh viãn ngnh Tin hc v cạc
âäüc gi mún tçm hiãøu thãm vãư k thût láûp trçnh cho lénh vỉûc trê tû nhán tảo.
Trong quạ trçnh biãn soản, tạc gi â nháûn âỉåüc tỉì cạc bản âäưng nghiãûp
nhiãưu âọng gọp bäø êch vãư màût chun män, nhỉỵng âäüng viãn khêch lãû vãư màût

III.2.2. Âënh nghéa lût âãû quy 15
III.2.3. Sỉí dủng biãún trong Prolog 18
IV. KIÃØU DỈỴ LIÃÛU CÁÚU TRỤC CA PROLOG 19
IV.1. Âënh nghéa kiãøu cáúu trục ca Prolog 19
IV.2. So sạnh v håüp nháút cạc hảng 22
CHỈÅNG 2 NGỈỴ NGHÉA CA CHỈÅNG TRÇNH PROLOG 31
I. QUAN HÃÛ GIỈỴA PROLOG V LÄGICH TOẠN HC 31
II. CẠC MỈÏC NGHÉA CA CHỈÅNG TRÇNH PROLOG 32
II.1. Nghéa khai bạo ca chỉång trçnh Prolog 33
II.2. Khại niãûm vãư gọi mãûnh âãư 34
i

II.3. Nghéa lägich ca cạc mãûnh âãư 35
II.4. Nghéa th tủc ca Prolog 37
II.5. Täø håüp cạc úu täú khai bạo v th tủc 47
III. VÊ DỦ : CON KHÈ V QU CHÚI 48
III.1. Phạt biãøu bi toạn 48
III.2. Gii bi toạn våïi Prolog 49
III.3. Sàõp âàût thỉï tỉû cạc mãûnh âãư v cạc âêch 54
III.3.1. Nguy cå gàûp cạc vng làûp vä hản 54
III.3.2. Thay âäøi thỉï tỉû mãûnh âãư v âêch trong chỉång trçnh 56
CHỈÅNG 3 CẠC PHẸP TOẠN V SÄÚ HC 65
I. SÄÚ HC 65
I.1. Cạc phẹp toạn säú hc 65
I.2. Biãøu thỉïc säú hc 65
I.3. Âënh nghéa cạc phẹp toạn trong Prolog 68
II. CẠC PHẸP SO SẠNH CA PROLOG 73
II.1. Cạc phẹp so sạnh säú hc 73
II.2. Cạc phẹp so sạnh hảng 75
II.3. Vë tỉì xạc âënh kiãøu 77

III.3. ỈÏng dủng chãú âäü lm viãûc våïi cạc tãûp 172
PHỦ LỦC A MÄÜT SÄÚ CHỈÅNG TRÇNH PROLOG 187
PHỦ LỦC B HỈÅÏNG DÁÙN SỈÍ DỦNG SWI-PROLOG 194
I. GIÅÏI THIÃUU SWI-PROLOG 194
II. LAIM VIÃUC VÅÏI SWI-PROLOG 195
II.1. Âàût cáu hi 195
II.2. Chảy trçnh demo 196
II.3. Chảy trçnh demo XPCE 197
II.4. Cạc lãûnh âån (Menu commands) 198
II.5. Soản tho chỉång trçnh 200
III. MÄÜT SÄÚ LÃÛNH SWI-PROLOG THÄNG DỦNG 201
TI LIÃÛU THAM KHO 203

iii


CHỈÅNG 1
Måí âáưu vãư ngän ngỉỵ Prolog
« A program is a theory (in some logic)
and computation is deduction from the theory »
J. A. Robinson
« Program = data structure + algorithm »
N. Wirth
« Algorithm = logic + control »
R. Kowalski
I. Giåïi thiãûu ngän ngỉỵ Prolog
I.1. P
rolog l ngän ngỉỵ âỉåüc sỉí dủng phäø biãún nháút trong dng cạc ngän
ngỉỵ láûp trçnh lägich (Prolog cọ nghéa l PROgramming in LOGic).
Ngän ngỉỵ Prolog do giạo sỉ ngỉåìi Phạp Alain Colmerauer v nhọm

cạch âàût cáu hi (query/ question) truy váún trãn cå såí dỉỵ liãûu ny, chàóng
hản cáu hi :
Socrat cọ chãút khäng ?
(tỉång âỉång khàóng âënh Socrat chãút âụng hay sai ?)
Mäüt hãû thäúng lägich s thỉûc hiãûn chỉång trçnh theo cạch «suy lûn»-tçm
kiãúm dỉûa trãn väún «hiãøu biãút» â cọ l chỉång trçnh - cå såí dỉỵ liãûu, âãø minh
chỉïng cáu hi l mäüt khàóng âënh, l âụng (Yes) hồûc sai (No). Våïi cáu hi
trãn, hãû thäúng tçm kiãúm trong cå såí dỉỵ liãûu khàóng âënh Socrat chãút v «tçm
tháúy» lût 5 tho mn (vãú thç). Váûn dủng lût 5, hãû thäúng nháûn âỉåüc Socrat
l ngỉåìi (vãú nãúu) chênh l sỉû kiãûn 5. Tỉì âọ, cáu tr låìi s l :
Yes
cọ nghéa Socrat chãút l âụng.
I.2. Cụ phạp Prolog
I.2.1. Cạc thût ngỉỵ
Mäüt chỉång trçnh Prolog l mäüt cå såí dỉỵ liãûu gäưm cạc mãûnh âãư (clause).
Mäùi mãûnh âãư âỉåüc xáy dỉûng tỉì cạc vë tỉì (predicat). Mäüt vë tỉì l mäüt phạt
biãøu no âọ vãư cạc âäúi tỉåüng cọ giạ trë chán âụng (true) hồûc sai (fail). Mäüt vë
tỉì cọ thãø cọ cạc âäúi l cạc ngun lägich (logic atom).

Måí âáưu vãư ngän ngỉỵ Prolog 3
Mäùi ngun tỉí (nọi gn) biãøu diãùn mäüt quan hãû giỉỵa cạc hảng (term).
Nhỉ váûy, hảng v quan hãû giỉỵa cạc hảng tảo thnh mãûnh âãư.
Hảng âỉåüc xem l nhỉỵng âäúi tỉåüng “dỉỵ liãûu” trong mäüt trçnh Prolog.
Hảng cọ thãø l hảng så cáúp (elementary term) gäưm hàòng (constant), biãún
(variable) v cạc hảng phỉïc håüp (compound term).
Cạc hảng phỉïc håüp biãøu diãùn cạc âäúi tỉåüng phỉïc tảp ca bi toạn cáưn gii
quút thüc lénh vỉûc âang xẹt. Hảng phỉïc håüp l mäüt hm tỉí (functor) cọ
chỉïa cạc âäúi (argument), cọ dảng
Tãn_hm_tỉí(Âäúi_1, , Âäúi_n)
Tãn hm tỉí l mäüt chùi chỉỵ cại v/hồûc ch säú âỉåüc bàõt âáưu båíi mäüt chỉỵ

Caùc chổợ sọỳ 0, 1, , 9.
Caùc kyù tổỷ õỷc bióỷt, chúng haỷn + / < > = : . & _ .
I.2.3. Chuù thờch
Trong mọỹt chổồng trỗnh Prolog, chuù thờch (comment) õổồỹc õỷt giổợa hai
cỷp kyù hióỷu /* vaỡ */ (tổồng tổỷ ngọn ngổợ C). Vờ duỷ :
//
/ ỏy laỡ mọỹt chuù thờch /
//
Trong trổồỡng hồỹp muọỳn õỷt mọỹt chuù thờch ngừn sau mọựi phỏửn khai baùo
Prolog cho õóỳn hóỳt doỡng, coù thóứ õỷt trổồùc mọỹt kyù hióỷu %.
Vờ duỷ :
%%%%%%%%%%%%%%%
% ỏy cuợng laỡ mọỹt chuù thờch
%%%%%%%%%%%%%%%
Prolog seợ boớ qua tỏỳt caớ caùc phỏửn chuù thờch trong thuớ tuỷc.

Måí âáưu vãư ngän ngỉỵ Prolog 5
II. Cạc kiãøu dỉỵ liãûu så cáúp ca Prolog
II.1. Cạc kiãøu hàòng (trỉûc kiãûn)
II.1.1. Kiãøu hàòng säú
Prolog sỉí dủng c säú ngun v säú thỉûc. Cụ phạp ca cạc säú ngun v säú
thỉûc ráút âån gin, chàóng hản nhỉ cạc vê dủ sau :
1 1515 0 -97
3.14 -0.0035 100.2
Tu theo phiãn bn ci âàût, Prolog cọ thãø xỉí l cạc miãưn säú ngun v
miãưn säú thỉûc khạc nhau. Vê dủ trong phiãn bn Turbo Prolog, miãưn säú
ngun cho phẹp tỉì -32768 âãún 32767, miãưn säú thỉûc cho phẹp tỉì ±
1e-307
âãún ±
1e+308. Cạc säú thỉûc ráút khi âỉåüc sỉí dủng trong Prolog. L do ch úu åí


(3) chuọựi õỷt giổợa hai dỏỳu nhaùy õồn (quote) õổồỹc bừt õỏửu bũng chổợ in
hoa, duỡng phỏn bióỷt vồùi caùc tón bióỳn :
Jerry Tom SMITH
II.2. Bióỳn
Tón bióỳn laỡ mọỹt chuọựi kyù tổỷ gọửm chổợ caùi, chổợ sọỳ, bừt õỏửu bồới chổợ hoa
hoỷc dỏỳu gaỷch dổồùi doỡng :
X, Y, A
Result, List_of_members
_x23, _X, _,

III. Sổỷ kióỷn vaỡ luỏỷt trong Prolog
III.1. Xỏy dổỷng sổỷ kióỷn
Vờ duỷ III.1 : Quan hóỷ gia õỗnh
óứ xỏy dổỷng caùc sổỷ kióỷn trong mọỹt chổồng trỗnh Prolog, ta lỏỳy mọỹt vờ duỷ
vóửù. Ta xỏy dổỷng mọỹt cỏy gia hóỷ nhổ sau :
(a) (b)
pam
jim
pat
ann
liz
bob
tom
parent
tom bob
Hỗnh III.1.Cỏy gia hóỷ.

Måí âáưu vãư ngän ngỉỵ Prolog 7
Trong cáy gia hãû (a), cạc nụt chè ngỉåìi, cn cạc mi tãn chè quan hãû cha

Láưn ny, Prolog khäng tr låìi Yes hồûc No, m âỉa ra mäüt giạ trë ca X
lm tho mn cáu hi trãn âáy :

8 Láûp trçnh logic trong Prolog
X = tom
Âãø biãút âỉåüc ai l con ca Bob, ta chè cáưn viãút :
?- parent(bob, X).
Våïi cáu hi ny, Prolog s cọ hai cáu tr låìi, âáưu tiãn l :
X = ann ->;
Âãø biãút âỉåüc cáu tr låìi tiãúp theo, trong háưu hãút cạc ci âàût ca Prolog,
NSD phi g vo mäüt dáúu cháúm pháøy (;) sau -> (Arity Prolog) :
X = pat
Nãúu â hãút phỉång ạn tr låìi m váùn tiãúp tủc u cáưu (;), Prolog tr låìi
No.
NSD cọ thãø âàût cạc cáu hi täøng quạt hån, chàóng hản : ai l cha mẻ ca
ai ? Nọi cạch khạc, cáưn tçm X v Y sao cho X l cha mẻ ca Y. Ta viãút nhỉ
sau :
?- parent(X, Y).
Sau khi hiãøn thë cáu tr låìi âáưu tiãn, Prolog s láưn lỉåüt tçm kiãúm nhỉỵng
càûp cha mẻ − con tho mn v láưn lỉåüt hiãøn thë kãút qu nãúu chỉìng no NSD
cn u cáưu cho âãún khi khäng cn kãút qu låìi gii no nỉỵa (kãút thục båíi
Yes) :
X = pam
Y = bob ->;
X = tom
Y = bob ->;
X = tom
Y = liz ->;
X = bob
Y = ann ->;

parent(Y, jim)
v
parent(X, Y).
Nãúu thay âäøi thỉï tỉû hai thnh pháưn cáu hi, thç nghéa lägich váùn khäng
thay âäøi v Prolog tr låìi cng kãút qu (cọ thãø thay âäøi vãư thỉï tỉû), nghéa l
ta cọ thãø âàût cáu hi nhỉ sau :
?- parent(X, Y), parent(Y, jim).
X = bob
Y = âỉåìng dáùn
Yes
Báy giåì ta âàût cáu hi ai l chạu ca Tom ?
?- parent(tom, X), parent(X, Y).
X = bob
Y = ann->;

10 Láûp trçnh logic trong Prolog
X = bob
Y = pat ->;
No
Mäüt cáu hi khạc cọ thãø nhỉ sau : Ann v Pat cọ cng ngỉåìi äng khäng ?
nghéa l ta diãùn âảt thnh hai giai âoản :
1. Tçm X l cha mẻ ca Ann.
2. X tçm tháúy cọ cng l cha mẻ ca Pat khäng ?
Cáu hi v tr låìi trong Prolog nhỉ sau :
?- parent(X, ann), parent(X, pat).
X = bob
Trong Prolog, cáu hi cn âỉåüc gi l âêch (goal) cáưn phi âỉåüc tho mn
(satisfy). Mäùi cáu hi âàût ra âäúi våïi cå såí dỉỵ liãûu cọ thãø tỉång ỉïng våïi mäüt
hồûc nhiãưu âêch. Chàóng hản dy cạc âêch :
parent(X, ann), parent(X, pat).

sex(tom, male).
sex(bob, male).
. . .
Báy giåì ta âỉa vo mäüt quan hãû måïi child, âäúi ngỉåüc våïi parent nhỉ sau :
child(liz, tom).
Tỉì âọ, ta âënh nghéa lût måïi nhỉ sau :
child(Y, X) :- parent(X, Y).
Lût trãn âỉåüc hiãøu l :
Våïi mi X v Y, hay
Y l con ca X nãúu
X l cha (hay mẻ) ca Y.
Våïi mi X v Y,
nãúu X l cha (hay mẻ) ca Y thç
Y l con ca X.
Cọ sỉû khạc nhau cå bn giỉỵa sỉû kiãûn v lût. Mäüt sỉû kiãûn, chàóng hản :
parent(tom, liz).
l mäüt âiãưu gç âọ ln âụng, khäng cọ âiãưu kiãûn gç rng büc. Trong khi âọ,
cạc lût liãn quan âãún cạc thüc tênh chè âỉåüc tho mn nãúu mäüt säú âiãưu
kiãûn no âọ âỉåüc tho mn. Mäùi lût bao gäưm hai pháưn:
• pháưn bãn phi (RHS: Right Hand Side) chè âiãưu kiãûn, cn âỉåüc gi l
thán (body) ca lût, v
• pháưn bãn trại (LH: Left Hand Side S) chè kãút lûn, cn âỉåüc gi l âáưu
(head) ca lût.

12 Láûp trçnh logic trong Prolog
Nãúu âiãưu kiãûn parent(X, Y) l âụng, thç child(Y, X) cng âụng v l háûu
qu lägich ca phẹp suy lûn (inference).
child(Y, X) :- parent(X, Y).
âáưu thán


âäúi tỉåüng âọ. Cạc quan hãû cáưn âënh nghéa âỉåüc biãøu diãùn båíi cạc cung cọ nẹt
âỉït. Mäùi âäư thë âỉåüc gii thêch nhỉ sau : nãúu cạc quan hãû âỉåüc chè båíi cạc
cung cọ nẹt liãưn âỉåüc tho mn, thç quan hãû biãøu diãùn båíi cung cọ nẹt âỉït
cng âỉåüc tho mn.
Y
X
Y

X

p
arent child
p
arent mother
Y
X
Z
parent
grandparent
parent
woman

Hçnh III.3. Âënh nghéa quan hãû con, mẻ v äng b sỉí dủng mäüt quan hãû khạc.
Nhỉ váûy, quan hãû äng−b grandparent âỉåüc viãút nhỉ sau :
grandparent(X, Z) :- parent(X, Y), parent(Y, Z).
Âãø thûn tiãûn cho viãûc âc chỉång trçnh Prolog, ta cọ thãø viãút mäüt lût
trãn nhiãưu dng, dng âáưu tiãn l pháưn âáưu ca lût, cạc dng tiãúp theo l
pháưn thán ca lût, mäùi âêch trãn mäüt dng phán biãût. Báy giåì quan hãû
grandparent âỉåüc viãút lải nhỉ sau :
grandparent(X, Z) :-

X = ann ->;
X = pat ->.
Yes
Váûy thç Pat lải l em gại ca chênh mçnh ?! Âiãưu ny sai vç ta chỉa gii
thêch r trong âënh nghéa chë em gại. Nãúu chè dỉûa vo âënh nghéa trãn âáy
thç cáu tr låìi ca Prolog l hon ton håüp l. Prolog suy lûn ràòng X v Y cọ
thãø âäưng nháút våïi nhau, mäùi ngỉåìi ân b cọ cng cha mẻ s l em gại ca
chênh mçnh. Ta cáưn sỉía lải âënh nghéa bàòng cạch thãm vo âiãưu kiãûn X v Y
khạc nhau. Nhỉ s tháúy sau ny, Prolog cọ nhiãưu cạch âãø gii quút, tuy
nhiãn lục ny ta gi sỉí ràòng quan hãû :
different(X, Y)
â âỉåüc Prolog nháûn biãút v âỉåüc tho mn nãúu v chè nãúu X v Y khäng
bàòng nhau. Âënh nghéa chë (em) gại måïi nhỉ sau :
sister(X, Y) :-
parent(Z, X),
parent(Z, Y),
woman(X).
different(X, Y).
Vê dủ III.2 : Ta láúy lải vê dủ cäø âiãøn sỉí dủng hai tiãn âãư sau âáy :
Táút c mi ngỉåìi âãưu chãút.
Socrate l mäüt ngỉåìi.
Ta viãút trong Prolog nhỉ sau :
mortal(X) :- man(X).
man(socrate).

Mồớ õỏửu vóử ngọn ngổợ Prolog 15
Mọỹt õởnh lyù õổồỹc suy luỏỷn mọỹt caùch lọgich tổỡ hai tión õóử naỡy laỡ Socrate
phaới chóỳt. Ta õỷt caùc cỏu hoới nhổ sau :
?- mortal(socrate).
Yes

16 Lỏỷp trỗnh logic trong Prolog
Ta noùi rũng X laỡ mọỹt tọứ tión giaùn tióỳp cuớa Z nóỳu tọửn taỷi mọỹt lión hóỷ cha
meỷ (ọng baỡ) giổợa X vaỡ Z :

parent

parent ancestor
parent
(b)
Y
X
parent ancestor
(a)
Z
X

Hỗnh III.5. Quan hóỷ tọứ tión : (a) X laỡ tọứ tión trổỷc tióỳp cuớa Z,
(b) X laỡ tọứ tión giaùn tióỳp cuớa Z.
Trong cỏy gia hóỷ ồớ Hỗnh III.1, Tom laỡ tọứ tión trổỷc tióỳp cuớa Liz, vaỡ tọứ tión
giaùn tióỳp cuớa Pat. Ta õởnh nghộa luỏỷt 1 (tọứ tión trổỷc tióỳp) nhổ sau :
ancestor(X, Z) :-
parent(X, Z).
Vồùi moỹi X vaỡ Z,
X laỡ mọỹt tọứ tión cuớa Z nóỳu
X laỡ cha meỷ cuớa Z .
ởnh nghộa luỏỷt 2 (tọứ tión giaùn tióỳp) phổùc taỷp hồn, trỗnh Prolog trồớ nón
daỡi doỡng hồn, mọựi khi caỡng mồớ rọỹng mổùc tọứ tión hỏỷu duóỷ nhổ chố ra trong
Hỗnh III.6. Kóứ caớ luỏỷt 1, ta coù quan hóỷ tọứ tión õổồỹc õởnh nghộa nhổ sau :
ancestor(X, Z) :- % luỏỷt 1 õởnh nghộa tọứ tión trổỷc tióỳp
parent(X, Z).

Z
X
Y
1
Y
2
Y
3
Z
X
ancestor

Hỗnh III.6. Caùc cỷp tọứ tión hỏỷu duóỷ giaùn tióỳp ồớ caùc mổùc khaùc nhau.
Tuy nhión, tọửn taỷi mọỹt caùch õởnh nghộa tọứ tión giaùn tióỳp ồớ mổùc bỏỳt kyỡ nhồỡ
pheùp õóỷ quy (recursive) nhổ sau :
ancestor(X, Z) :-
parent(X, Z).
ancestor(X, Z) :-
parent(X, Y),
ancestor(Y, Z).
Vồùi moỹi X vaỡ Z,
X laỡ mọỹt tọứ tión cuớa Z nóỳu
tọửn taỷi Y sao cho
(1) X laỡ cha meỷ cuớa Y vaỡ
(2) Y laỡ mọỹt tọứ tión cuớa Z.
ancestor
parent
. . .
ancestor
Y

haveachil(X) :- parent(X, Y).
cọ thãø âỉåüc âc nhỉ sau :
(a) Våïi mi X v Y,
nãúu X l cha (hay mẻ) ca Y thç X cọ mäüt ngỉåìi con.
(b) Våïi mi X,
X cọ mäüt ngỉåìi con nãúu täưn tải mäüt Y sao cho X l cha (hay mẻ)
ca Y.
Khi mäüt biãún chè xút hiãûn mäüt láưn trong mäüt mãûnh âãư thç khäng cáưn âàût
tãn cho nọ. Prolog cho phẹp sỉí dủng cạc biãún nàûc danh (anonymous variable)
l cạc biãún cọ tãn chè l mäüt dáúu gảch dỉåïi dng _. Ta xẹt vê dủ sau :
have_a_child(X) :- parent(X, Y).
Lût trãn nãu lãn ràòng våïi mi X, X cọ mäüt con nãúu X l cha ca mäüt Y
no âọ. Ta tháúy âêch have_a_child khäng phủ thüc gç vo tãn ca con, vç váûy
cọ thãø sỉí dủng biãún nàûc danh nhỉ sau :
have_a_child(X) :- parent(X, _).
Mäùi vë trê xút hiãûn dáúu gảch dỉåïi dng _ trong mäüt mãûnh âãư tỉång ỉïng
våïi mäüt biãún nàûc danh måïi. Vê dủ nãúu ta mún thãø hiãûn täưn tải mäüt ngỉåìi

Måí âáưu vãư ngän ngỉỵ Prolog 19
no âọ cọ con nãúu täưn tải hai âäúi tỉåüng sao cho mäüt âäúi tỉåüng ny l cha ca
âäúi tỉåüng kia, thç ta cọ thãø viãút :
someone_has_a_child :- parent(_, _).
Mãûnh âãư ny tỉång âỉång våïi :
someone_has_a_child :- parent(X, Y).
nhỉng hon ton khạc våïi :
someone_has_a_child :- parent(X, X).
Nãúu biãún nàûc danh xút hiãûn trong mäüt cáu hi, thç Prolog s khäng hiãøn
thë giạ trë ca biãún ny trong kãút qu tr vãư. Nãúu ta mún tçm kiãúm nhỉỵng
ngỉåìi cọ con, m khäng quan tám âãún tãn con l gç, thç chè cáưn viãút :
?- parent(X, _).


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status