Sunteți pe pagina 1din 11

Lab. 1 , pag.

Limbajul Prolog
n Prolog se poate ajunge la soluii prin inferen logic (deducie logic) pornind de
la ceva cunoscut n prealabil. Tipic, un program n limbajul Prolog nu este o secven de
aciuni ci o mulime de fapte i reguli care mpreun duc la nite concluzii logice. Prolog este
ceea ce numim un limbaj declarativ.
Prolog lucreaz cu aa numitele predicate logice. Un predicat este o form foarte clar
i concis de a exprima un fapt existent. Se utilizeaz o sintax foarte simpl, apropiat de
limbajul natural pentru a exprima un predicat logic.
Limbajul Prolog conine un motor de inferen care efectuaz deduciile logice
pornind de la nite fapte cunoscute. Prolog ncearc s deduc dac o ipotez este adevrat
(cu alte cuvinte s rspund la ntrebri) prin interogarea unui set de informaii deja
adevrate.
O alt caracteristic important a limbajului Prolog este aceea c gsete toate soluiile
unei probleme. Prolog nu parcurge baza de date logic pur i simplu ci, dup gsirea unei
soluii la o problem, poate face o revenire pentru gsirea altor soluii.
Sintaxa unui predicat logic este foarte simpl i apropiat de limbajul natural, ca n
exemplele din tabelul urmtor:
Limbaj natural
O main este mare
Un trandafir este rou
Lui Petre i place o main dac este mare

Predicat logic
mare(main)
rou(trandafir)
place(petre, maina) if mare(maina)

Fapte i reguli
Un program Prolog definete obiecte i relaii, apoi definete reguli bazate pe aceste
relaii. De exemplu propoziia:
Lui Petre i plac cinii.
arat o relaie dintre obiectele petre i cini. O regul care arat cnd propoziia anterioar
este adevrat:
Lui Petre i plac cinii dac cinii sunt simpatici.
Fapte
n Prolog o relaie ntre obiecte este numit predicat. n limbaj natural o relaie ntre
obiecte este exprimat printr-o propoziie. n cadrul logicii predicatelor, o relaie este
exprimat printr-o simpl fraz un fapt care const dintr-un nume de relaie i unul sau
mai multe obiecte (ntre paranteze). Ca i propoziiile, faptele se ncheie cu punct.

Lab. 1 , pag. 2

Exemple:
n limbaj natural:

n Prolog:

Lui Mihai i place Maria.


Mariei i place Mihai.
Lui Mihai i plac merele.

place(mihai, maria).
place(maria, mihai).
place(mihai, mere).

Faptele pot exprima proprieti ale unor obiecte. Exemple:


Merele sunt verzi.
Florina este fat.
Reguli
Regulile permit deducia unor fapte din alte fapte (inferena). Altfel spus, o regul este
o concluzie care este adevrat dac una sau mai multe concluzii sau fapte sunt adevrate.
Exemple:
Mariei i place tot ce i place i lui Mihai.
Florinei i place tot ceea ce este verde.
Din aceste fapte se poate deduce ceea ce le place Mariei i Florinei:
Mariei i place Maria.
Florinei i plac merele.
Se pot codifica aceste reguli n Prolog:
place(maria, Ceva) :- place(marius, Ceva).
place(florina,Ceva):-verde(Ceva).
Simbolul :- se poate interpreta ca if i servete la separarea celor dou pri ale unei
reguli: antet i corp. Se poate de asemenea interpreta o regul ca o procedur. Cu alte cuvinte,
regulile anterioare se mai pot interpreta i astfel:
Pentru a demonstra c Mariei i place ceva, demonstreaz c i lui Marius i place acelai
lucru, respectiv Pentru a demonstra c Florinei i place ceva, demonstreaz c acel ceva este
verde.

Lab. 1 , pag. 3

Interogri
Dup ce s-au furnizat cteva fapte i reguli unui program Prolog, acestuia i se pot pune
ntrebri, numite interogri.
n limbaj natural o ntrebare ar putea fi:

n limbajul Prolog se poate interoga:

i place lui Marius Maria?

place(marius, maria).

La aceast interogare Prolog rspunde :


yes
O alt interogare ar putea fi:

Sau n Prolog:

Ce i place lui Marius?

place(marius, Ce)

Se poate observa c sintaxa Prolog nu se schimb cnd se pune o ntrebare. O astfel de


interogare, d.p.d.v. sintactic arat ca un fapt. Se remarc faptul c al doilea obiect Ce este
scris cu liter mare., n timp ce primul obiect marius este scris cu liter mic. Motivul este
c marius este o constant, este ceva fix, iar Ce este o variabil, iar variabilele ncep cu liter
mare sau cu caracterul _. Prolog ntotdeauna va ncerca s rspund la o interogare prin
cercetarea faptelor ncepnd de la nceput spre sfrit. La ntrebarea Ce i place lui Marius,
Prolog va rspunde:
Ce=maria
Ce=cinii
2 solutions
Aceste soluii se obin datorit fapului c Prolog tie c
place(marius, maria)
i
place(marius,cinii)

Lab. 1 , pag. 4

Legtura dintre fapte, reguli i interogri


Presupunem c exist urmtoarele fapte i reguli:
O main rapid este bun.
O main mare este frumoas.
O main mic este practic.
Lui Marius i place o main dac este bun.
Cnd se examineaz aceste fapte se poate deduce c lui Marius i place o main
rapid. n aceeai manier deduce i Prolog aceeai concluzie. Dac nici unul dintre fapte nu
se refer la o main rapid, atunci nu se poate deduce logic ce tip de main i place lui
Marius, ns noi am putea face anumite supoziii, n timp ce Prolog nu poate face astfel de
supoziii.
n continuare este prezentat un exemplu care demonstreaz cum utilizeaz Prolog regulile
pentru a rspunde la interogri:
place(elena,tenis).
place(marius, fotbal).
place(nicu,volei).
place(ioana,innot).
place(mihai,handbal).
place(petre,Activitate):-place(nicu, Activitate).
Ultima linie este o regul, care n limbaj natural corespunde urmtoarei propoziii: Lui
Petre i place o activitate dac i lui Nicu i place acea activitate. n aceast regul antetul
este place(petre,Activitate), i corpul place(nicu, Activitate). Nu exist nici un fapt care s
specifice c lui Petre i place voleiul. Pentru ca Prolog s descopere acest lucru trebuie s I se
pun ntrebarea (interogarea):
place (petre, volei)
La ncercarea de a da o soluie acestei interogri, Prolog va utiliza regula anterioar.
Faptele, regulile i interogrile pot fi puse mpreun n cadrul unui program. Un astfel
de program este urmtorul:
predicates
nondeterm place(symbol,symbol)
clauses
place(elena,tenis).
place(marius, fotbal).
place(nicu,volei).
place(ioana,innot).

Lab. 1 , pag. 5

place(mihai,tenis).
place(petre,Activitate):place(nicu, Activitate).
goal
place(petre,volei).
Testul goal va furniza ntr-o fereastr de ieire rezultatul:
yes
Dac se utilizeaz testul:
place(petre,fotbal).
Se va obine rspunsul
no
Variabile
n Prolog variabilele permit scrierea de fapte, reguli i interogri. n limbaj natural
utilizm variabilele n propoziii tot timpul. n limbaj natural putem face afirmaia:
Lui Petre i place acelai lucru ca i lui Nicu.
Pentru a reprezenta o variabil n Prolog, aceasta trebuie scris cu prima liter mare sau
cu liniua de subliniere. n exemplul urmtor
place(petre, Obiect)
Obiect este o variabil i nu un atom, cum este petre.
Rezumat
1. Un program Prolog este format din dou tipuri de fraze (cunoscute sub denumirea de

clauses): fapte i reguli.


a. Faptele sunt relaii sau proprieti pe care programatorul le cunoate ca fiind
adevrate (true);
b. Regulile sunt dependente de relaii; ele i permit programului s deduc o cuant
de informaie din alta. O regul este adevrat dac un set dat de condiii sunt
adevrate; fiecare regul depinde de setul su de condiii.

Lab. 1 , pag. 6

2. n Prolog toate regulile au dou pri: un antet i un corp separate prin caracterul :-

.
a. Antetul este reprezentat de un fapt care va fi adevrat dac un anumit numr de
condiii sunt adevrate. Acest lucru este cunoscut sub denumirea de Concluzie
dependent de relaii.
b. Corpul este reprezentat printr-un set de condiii care trebuie s fie adevrate
pentru ca Prolog s poat demonstra c antetul este o regul adevrat.
3. Faptele i regulile sunt similare doar c faptele nu au un corp. Un fapt se comport ca
o regul la care antetul este ntotdeauna true.
4. Dac s-a furnizat un set de fapte i reguli, se pot pune ntrebri (goal) cu privire la
acestea. Acest lucru este cunoscut sub denumirea de querying the Prolog system).
Prolog ntotdeauna caut soluii ncepnd examinarea faptelor de la nceput spre sfrit.
5. Motorul de inferen logic Prolog (The Prologs inference engine) analizeaz
condiiile dintr-o regul i ncearc s gseasc o potrivire cutnd n lista de fapte i
reguli cunoscute. Dac nici o condiie nu se potrivete cu fapte cunoscute Prolog nu
trage nici o concluzie.
Exemple
Programul urmtor permite afisarea soluiilor unei probleme legate de cumprarea unei
maini.
predicates
nondeterm poate_cumpara(symbol,symbol)
nondeterm persoana(symbol)
nondeterm masina(symbol)
nondeterm place(symbol,symbol)
nondeterm de_vanzare(symbol)
clauses
poate_cumpara(X,Y):persoana(X),
masina(Y),
place(X,Y),
de_vanzare(Y).
persoana(maria).
persoana(ana).
persoana(elena).
persoana(marius).
masina(galbena).

Lab. 1 , pag. 7

masina(rosie).
place(maria, rosie).
place(ana, pizza).
place(elena, tennis).
place(marius, tennis).
de_vanzare(pizza).
de_vanzare(galbena).
de_vanzare(rosie).
goal
poate_cumpara(Cine,Ce).
Testai programul cu urmtoarele teste:
poate_cumpara(ana,Ce).
poate_cumpara(maria,Ce).
poate_cumpara(Cine,rosie).
Adugai i alte fapte i eventual reguli acestui program.
Predicate
Denumirea simbolic a unei relaii este predicat. Obiectele care sunt legate printrun predicat poart numele de argumente. n faptul place(marius,maria), relaia place
este un predicat, iar marius i maria sunt argumentele sale.
n continuare sunt prezentate exemple de predicate Prolog cu zero sau mai multe
argumente.
pred(integer, symbol)
persoana(nume, prenume, sex)
run
insert_mode
data_nasterii(firstName, lastName, data)
Utilizarea variabilelor n interogri
ntr-o interogare simpl se pot utiliza variabile pentru a pune ntrebri. Un astfel de
exemplu este:
place(X,tenis)

Lab. 1 , pag. 8

Aceast interogare utilizeaz litera X pentru a indica o persoan necunoscut. Este


recomandabil s se utilizeze ns denumiri mai explicite, ca n exemplul:
place(Persoana,tenis)
Se poate afirma c Prolog nu are instruciuni de atribuire; acest lucru difereniaz
limbajul Prolog fa de alte limbaje de programare. n Prolog variabilele primesc valori
prin potrivire cu constante n fapte sau reguli.
Pn n momentul n care primete o valoare, variabilele sunt numite libere; n
momentul n care o variabil primete o valoare ea devine variabil legat. Ea rmne legat
atta timp ct este nevoie pentru a furniza o soluie la o interogare, dup care variabila
respectiv devine din nou liber, n vederea obinerii altor soluii.
Exemplul urmtor ilustreaz cum primesc variabilele soluii:
predicates
nondeterm place(symbol,symbol)
clauses
place(elena,citeste).
place(paul,calculatoarele).
place(paul,badminton).
place(vasile,badminton).
place(petre,innotul).
place(petre,citeste).
goal
place(Persoana,citeste),
place(Persoana,innotul).
Prolog va rezolva cele dou pri ale acestei interogri cutnd n lista de fapte i reguli
de la nceput spre sfrit.
n prima parte a interogrii place(Persoana,citeste) variabila Persoana este o
variabil liber; valoarea sa este necunoscut pn n momentul n care se gsete o soluie. n
schimb argumentul citeste este cunoscut.
Variabile anonime
Sunt utile atunci cnd sunt necesare numai anumite informaii dintr-o interogare, alte
informaii putnd fi ignorate. n Prolog variabila anonim se reprezint prin caracterul _
(underscore).
Urmtorul exemplu demonstraz cum se pot utiliza variabilele anonime.

Lab. 1 , pag. 9

predicates
barbat(symbol)
femeie(symbol)
nondeterm parinte(symbol,symbol)
clauses
barbat(ioan).
barbat(paul).
femeie(elena).
femeie(roxana).
parinte(ioan,paul).
parinte(elena,paul).
parinte(paul,roxana).
goal
parinte(Parinte,_).
O variabil anonim se poate utiliza n locul oricrei alte variabile. Diferena dintre o
variabil anonim i o variabil obinuit este aceea c o variabil anonim nu va primi
niciodat valoare. n exemplul anterior interogarea furnizeaz soluii privitoare la ce persoane
sunt prinii cuiva, dar nu intereseaz ai cui prini sunt acetia.
Variabilele anonime se pot utiliza i n fapte, ca n exemplele urmtoare:
are( _ ,pantofi)
mannc( _ )
Aceste fapte se pot traduce astfel:
Toat lumea are pantofi.
Toat lumea mnnc.
Variabilele anonime se potrivesc cu orice.
Interogri (goals)
Referitor la aceste interogri (goals) se poate afirma: cnd interogm Prolog, de fapt i
se d o sarcin: Gsete un rspuns la aceast ntrebare, dac exist unul.
Interogrile pot fi simple:

Lab. 1 , pag. 10

place(elena,innotul).
place(Persoana,innotul).
Sau compuse:
place(Persoana,innotul), place(Persoana,citeste).
n exemplul anterior testai programul cu interogarea:
Goal parinte(Persoana,_), barbat(Persoana).
Prolog va ncerca mai nti s rezolve subinterogarea:
parinte(Persoana, _ )
Cutnd n seciunea clauses o potrivire, apoi leag variabila Parinte cu o valoare returnat
de parinte. Valoarea returnat va fi utilizat n partea a doua a interogrii, n care variabila
Persoana este liber.
Interogri compuse. Conjuncie i disjuncie.
Dup cum s-a artat, se pot forma interogri compuse pentru a afla o soluie dac
subtestul A i subtestul B sunt adevrate, separnd prin virgul (,) aceste dou subteste. n
acest caz se spune c s-a utilizat conjuncia. Exist ns posibilitatea utilizrii disjunciei,
prin separarea celor dou subteste A i B prin caracterul ;, cum s-a utilizat n exemplul
urmtor:
predicates
nondeterm autoturism(symbol,long,integer,symbol,long)
nondeterm camion(symbol,long,integer,symbol,long)
nondeterm autovehicol(symbol,long,integer,symbol,long)
clauses
autoturism(chrysler,130000,3,alb,12000).
autoturism(ford,90000,4,gri,25000).
autoturism(datsun,8000,1,alb,30000).
camion(ford,80000,6,albastru,8000).
camion(datsun,50000,5,rosu,20000).
camion(toyota,25000,2,negru,25000).

Lab. 1 , pag. 11

autovehicol(Marca,Km_parcursi,Vechime,Culoare,Pret):autoturism(Marca,Km_parcursi,Vechime,Culoare,Pret);
camion(Marca,Km_parcursi,Vechime,Culoare,Pret).
goal
autoturism(Marca,Km_parcursi,Ani_vechime,Culoare,25000).
Acest goal are ca scop gsirea unei maini care s coste exact 25000$.
Se pot folosi ns i interogri de forma:
Exist n list maini care s coste sub 25000 $?
n Prolog se poate utiliza interogarea:
autoturism(Marca,Km_parcursi,Ani_vechime,Culoare,Cost), Cost<25000.
Aceast goal este compus din dou pri:
autoturism(Marca,Km_parcursi,Ani_vechime,Culoare,Cost), /* subgoal A*/
i
Cost<25000. /* subgoal B*/
Numit conjuncie .
Se poate utiliza i un test (goal) compus tip disjuncie, ca n exemplul urmtor:
autoturism(Marca,Km_parcursi,Ani_vechime,Culoare,Cost), Cost<25000;
/* subgoal A or */
camion(Marca,Km_parcursi,Ani_vechime,Culoare,Cost), Cost<20000.
/* subgoal B*/
Comentarii
Comentariile au urmtoarea sintax:
/*Acesta este un comentariu*/
% Acesta este tot un comentariu
/********************************************/
/* Si aceste trei linii sunt comentarii
*/
/********************************************/

S-ar putea să vă placă și