![]()
|
Fundamentele Prolog-ului (fapte, reguli)Un program Prolog este o colectie de clauze. Acestea pot fi de doua tipuri: fapte sau reguli.Fapte PrologUn fapt precizeaza o proprietate a unui obiect sau exprima o relatie dintre mai multe obiecte. De exemplu proprietatea florilor de a fi frumoase se poate exprima in Prolog prin urmatorul fapt:frumoase(flori). iar preferinta pe care o are Dan pentru Maria se poate exprima prin: place(dan,maria). Forma generala prin care pot fi descrise faptele este: relatie(obiect_1,obiect_2,...,obiect_n). unde 'relatie' reprezinta un nume pentru relatia dintre obiectele 'obiect_1,...,obiect_n'. Programatorul este cel care stabileste numele relatiei, precum si semnificatia ei. Astfel faptul ca Dan o place pe Maria se poate exprima si prin place(maria,dan). Mai facem observatia ca faptele introduse in program sunt considerate a fi adevarate, adica informatia pe care o furnizeaza este cunoscuta de sistem, fara ca acesta sa verifice daca este o relatie reala. De exemplu, faptul verde(zapada). este corect din punct de vedere sintactic, dar nu exprima o proprietate reala a zapezii. Numele pentru relatii si obiecte trebuie sa satisfaca urmatoarele reguli: a) numele de relatie trebuie sa inceapa cu o litera urmata de orice combinatie de litere cifre sau _. Este recomandat ca primul simbol sa fie litera mica, iar numele sa fie ales astfel incat sa sugereze relatia reprezentata; b) numele de obiecte trebuie sa inceapa cu litera mica, urmata de oricate caractere. Colectia de fapte se mai numeste baza de date(database). Exemple: Pentru reprezentarea proprietatilor si relatiilor de mai jos Iarba este verde. Ioana este studenta. Dan are masina. Ionut este fiul lui Dan si al Mariei. se pot declara urmatoarele fapte: verde(iarba). student(ioana). are(dan,masina). fiu(ionut,dan,maria). Reguli PrologO regula Prolog exprima o relatie de dependenta intre fapte si permite obtinerea unor informatii noi pe baza celor deja cunoscute.Forma generala prin care poate fi descrisa o regula este: Capul_regulii if Corpul_regulii sau relatie(obiect,obiect,...,obiect) if relatie(obiect,obiect,...,obiect) and .... relatie(obiect,obiect,...,obiect). semnificatia fiind ca daca toate relatiile din corpul regulii sunt adevarate atunci este adevarata si relatia din capul regulii. De exemplu cunoscand ca Maria le place pe Elena si pe Ioana, iar lui Dan ii place tot ce-i place si Mariei, atunci putem scrie faptele: place(maria,elena). place(maria,ioana). si urmatoarea regula: place(dan,Cineva) if place(maria,Cineva). In corpul regulii putem avea si relatii legate prin disjunctie (or) cu semnificatia ca relatia din capul regulii este adevarata daca este adevarata una din relatiile din corpul regulii. De exemplu fraza: 'Lui Dan ii plac lucrurile scumpe sau ii place tot ce-i place Mariei' se poate exprima prin place(dan,Ceva) if scump(Ceva) or place(maria,Ceva). Regula de mai sus se mai poate scrie si astfel place(dan,Ceva) if scump(Ceva). place(dan,Ceva) if place(maria,Ceva). ObservatieUrmatoarele simboluri sunt echivalente:if :- and , or ; Variabile, variabile anonimeIn TP numele de variabile trebuie sa inceapa cu majuscula sau _, urmate de oricate litere, cifre sau _. De exemplu: Cineva, PERSOANA, Un_om, X.O variabila care nu are valoare se numeste libera; valoarea o poate primi prin unificare, devenind variabila legata (ATENTIE: variabilele nu pot fi folosite pentru stocarea informatiei!). Variabila anomima (reprezentata prin _) se foloseste atunci cand valoarea la care se leaga nu este folosita. ConstanteIn TP sunt constante numele de obiecte si numerele (intregi sau reale). Exemplu: maria, dacia, 13, 18.5.Interogarea bazei de dateFaptele si regulile contin informatii despre relatiile dintre obiecte. Intrebarile pe care le punem sistemului se numesc 'goals' (= scopuri).Forma generala a unui scop este: relatie(obiect,obiect,...,obiect) and .... relatie(obiect,obiect,...,obiect). Scopurile pot fi interne sau externe. Un scop intern se declara in sectiunea care incepe cu 'goal', iar unul extern se introduce in fereastra de dialog, dupa rularea programului. Exemple
Probleme1. Se dau urmatoarele predicate:tata(X,Y) /* X este tatal lui Y */Sa se scrie reguli Prolog pentru urmatoarele relatii: parinte(X,Y) /* X este un parinte al lui Y */.2. Se da o baza de date pentru reprezentarea cunostintelor despre carti, editurile care le publica si magazinele care vand carti, cu fapte de tipul: vinde(Mag,Edit) /* magazinul Mag vinde carti ale editurii Edit */Sa se obtina raspunsuri la intrebari de tipul: - Cine publica "Mara"?3. Modificati programul din 'Exemplul 5' astfel incat cumpararea unei masini sa se faca numai daca pretul de vanzare nu depaseste economiile cumparatorului.
|