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.

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

n Prolog: place(mihai, maria). place(maria, mihai). place(mihai, mere).

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)

Legtura dintre fapte, reguli i interogri

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

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). masina(rosie). place(maria, rosie).

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 */ /********************************************/

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