Documente Academic
Documente Profesional
Documente Cultură
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:
place(mihai, maria).
place(maria, mihai).
place(mihai, mere).
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:
place(marius, maria).
Sau n Prolog:
place(marius, Ce)
Lab. 1 , pag. 4
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
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
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
*/
/********************************************/