Documente Academic
Documente Profesional
Documente Cultură
1.1.1. Fapte
Un fapt exprim a relaie ntre obiecte. Considerm
cteva exemple de fapte, n care se va utiliza urmtoarele notaii
Prolog pentru comentarii: tot ce se conine ntre /* i */ este
un comentariu; dac comentariul ncape ntr-un rnd, atunci se
poate scrie n faa comentariului caracterul %.
zboara(corb). %corbul zboar
este_autor(shakespeare,hamlet).
/*Shakespeare
este autorul operei Hamlet */
traducere(bread,pain).
/*pain
este
varianta
francez a lui bread */
Astfel faptul
ruta(paris, roma).
poate semnifica c Parisul e legat cu Roma de o rut, ns noi nu
cunoatem nici numrul rutei, nici ora de plecare.
S considerm sintaxa ultimului fapt. El este compus
dintr-un scop ruta(paris,roma) i un punct, ., la sfrit.
irul de simboluri ruta este numele relaiei care se mai numete
nume de predicat sau functor, iar paris i roma sunt obiectele
antrenate n aceast relaie. ntruct predicatul ruta are dou
argumente paris i roma, care sunt puse ntre paranteze i
desprite prin virgul, el se numete predicat binar. n caz
general, un predicat poate avea orice numr de argumente (i,
bineneles, zero). Acest numr se numete aritatea predicatului,
care n cazul predicatului ruta este 2. Deci, faptul este cea mai
simpl form de predicat ce semnific existena unei relaii ntre
o mulime de obiecte.
Fie c predicatele
ruta(oras_plecare, oras_sosire).
i
ruta(oras_plecare, oras_sosire, ruta).
sunt adevrate dac oras_plecare e legat cu oras_sosire i dac
oras_plecare e legat cu oras_sosire prin ruta ruta,
corespunztor. Aceste dou predicate sunt diferite. Pentru a ne
referi la predicatul de aritatea 3 vom utiliza notaia ruta/3, iar
pentru cel de aritatea doi - ruta/2.
29
+
:-->
?-ruta(roma, paris)
no
ruta(paris, roma).
32
Rebreanu
constante
atomi
atomi speciali
structurai
variabile
numere
Fig. 1.1. Termenii n Prolog
Vitalie Cotelea
+1.2
-1
termeni
simpli
Triasc regele!
+important
_aceasta_de_asemenea
Rebreanu
Aceasta_e_1_variabila
_2000
__
dar termenii
aCESTA_NU
NICI-ACESTA
nu sunt variabile. Un singur caracter _ este o form special
de variabil numit variabila anonim. Ea se utilizeaz pentru a
arta c pe poziia dat se accept orice valoare care nu ne
intereseaz.
Termeni structurai (compui sau compleci).
Termenul structurat desemneaz un obiect n care sunt regrupate
alte obiecte numite componente. Regruparea permite o
manipulare mai uoar a obiectelor complexe.
autor(blaise, pascale)
El poate fi interpretat c exist un autor al crui nume
este pascal i prenume blaise. Acest termen are functorul autor,
componentele blaise i pascale i aritatea 2. E evident c
componentele unui termen structurat pot fi la rndul su termeni
structurai. Astfel termenul structurat
cartea(cugetari, autor(blaise, pascale))
semnific c cugetri este o carte a crei autor este blaise
pascale. Acest termen are dou componente cugetari i
termenul structurat autor(blaise, pascale).
Un termen structurat poate fi reprezentat sub forma unui
arbore a crui rdcin e simbolul funcional (adic, functorul),
numrul de descendeni ai rdcinii fiind aritatea, adic numrul
de componente ale termenului structurat, ordonarea
descendenelor corespunde ordonrii componentelor. Dac, la
rndul su, o component e un termen structurat, ea se
descompune n acelai mod. De exemplu termenul structurat
cartea(cugetari, autor(blaise, pascale)) e reprezentat de arborele
din Fig 2.2.
Sintaxa termenilor structurai e asemntoare cu cea a
faptelor. Deci, un predicat poate fi considerat ca un termen
structurat a crui functor este numele predicatului, iar
argumentele reprezint componentele termenilor structurai.
Acest lucru este utilizat n diverse implementri Prolog pentru
tratarea uniform i sinteza dinamic de programe.
cartea
cugetari
autor
blaise
Termenul 2
ion
petru
12
12.0
Liviu Rebreanu
scriitor
plus
3*4
Se unific?
Da
Nu
Da
Nu
Da
Nu
Nu
Nu
pascale
Vitalie Cotelea
dac:
ei au acelai functor
Termenul 2
autor(blaise,pascale)
nume(blaise,pascale)
autor(blaise,pascale,1623)
*(3,4)
4+3
Se unific?
da
nu
nu
da
nu
la ntrebarea
?-poseda(marcel, Obiect)
care semnific Ce obiecte posed Marcel?, Prologul rspunde
Obiect=cartea(cugetari, autor(blaise, pascale));
Obiect=cartea(moby_dick, autor(herman, melville))
La ntrebarea
?-poseda(marcel, cartea(_, autor(Prenume, _)))
Vitalie Cotelea
grec, dac X este atenian sau Pentru orice X, X este grec, dac
X este spartan. Dar n astfel de expresii numele variabilelor nu
este semnificativ. Astfel, regulile de mai sus reprezint acelai
lucru ca i regulile
ruta(amsterdam, paris).
grec(X):-atenian(X).
grec(Y):-spartan(Y).
1.2. Reguli
Y=emilia
Y=andrei
Y=eliza
S revenim pentru un moment la rspunsul obinut. Nu e
curios acest rspuns? ntrebarea pus, de fapt, este Cui Eliza i
este sor?, iar Prologul, dup ce a rspuns corect c Eliza este
sora lui Emilia i a lui Andrei, ne afirm c ea este de asemenea
sor sie. Din punctul de vedere al mecanismului de cutare a
soluiilor rspunsul este just. Examinnd regula sora_lui/2,
constatm c nimic nu interzice ca X i Y s primeasc aceleai
valori. Pentru ca regula s fie ntr-adevr corect, trebuie
adugat o condiie suplimentar, ce ar spune c variabilele X i
Y nu pot desemna aceeai persoan. n Prolog aceasta se va scrie
grec(X):-atenian(X).
grec(X):-spartan(X).
variabila X, aprut n prima regul, nu are nimic comun cu cea
din regula a doua, cu toate c au acelai nume. Regulile de mai
sus sunt traduceri ale expresiilor logice: Pentru orice X, X este
Vitalie Cotelea
n!=12(n-1)n
care nseamn c factorialul unui numr este produsul tuturor
numerelor de la 1 la cel specificat.
Vitalie Cotelea