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.
Exemple:
Lab. 1 , pag. 2
n limbaj natural: Lui Mihai i place Maria. Mariei i place Mihai. Lui Mihai i plac merele. 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.
Interogri
Lab. 1 , pag. 3
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: i place lui Marius Maria? La aceast interogare Prolog rspunde : yes O alt interogare ar putea fi: Ce i place lui Marius? Sau n Prolog: place(marius, Ce) n limbajul Prolog se poate interoga: place(marius, maria).
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
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). place(mihai,tenis). place(petre,Activitate):-
Lab. 1 , pag. 5
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. 2. n Prolog toate regulile au dou pri: un antet i un corp separate prin caracterul :-.
Lab. 1 , pag. 6
Lab. 1 , pag. 7
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 printr-un 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) Aceast interogare utilizeaz litera X pentru a indica o persoan necunoscut. Este recomandabil s se utilizeze ns denumiri mai explicite, ca n exemplul:
Lab. 1 , pag. 8
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. predicates barbat(symbol)
Lab. 1 , pag. 9
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: place(elena,innotul). place(Persoana,innotul).
Lab. 1 , pag. 10
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). autovehicol(Marca,Km_parcursi,Vechime,Culoare,Pret):autoturism(Marca,Km_parcursi,Vechime,Culoare,Pret); camion(Marca,Km_parcursi,Vechime,Culoare,Pret).
Lab. 1 , pag. 11
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 */ /********************************************/