Curs1. Prolog

  • Published on
    09-Dec-2015

  • View
    216

  • Download
    3

Embed Size (px)

DESCRIPTION

SISTEMUL

Transcript

<ul><li><p>Bazele Informaticii(curs pentru doctoranzi)Aurelia Prepeli (Profir), dr.,conf. univ.catedra Tehnologii de Programare, U.S.M.</p></li><li><p>Tematica lucrrilor de laborator la informatic pentru doctoranzi (cursurile 1-8): Introducere in limbajul de programare de nivel nalt Prolog. Principalele caracteristici ale limbajului Prolog. Turbo Prolog. Mediul de programare TP. Crearea bazelor de fapte, cunotine i utilizarea lor (Curs 1).</p><p> Sistemul de operare Windows. Operaii cu ferestre, dosare, fiiere, programe, aplicaii (Curs 2).</p><p> Editorul de texte Microsoft Word. Crearea i redactarea documentelor n Microsoft Word. Crearea tabelelor i efectuarea operaiilor cu elementele tabelelor (Curs 3).</p><p> Aplicaia Excel. Calculul tabelelor. Crearea tabelelor, graficelor, diagramelor n Excel i includerea lor ntr-un document pregtit n Microsoft Word (Curs 4).</p></li><li><p>Tematica lucrrilor de laborator la informatic pentru doctoranzi (cursurile 1-8): Aplicaia Microsoft PowerPoint. Crearea unei prezentaii n PowerPoint (Curs 5). Navigarea pe Internet. Internetul i pota electronic. Crearea potei electronice. Pregtirea, transmiterea i primirea mesajelor electronice (Curs 6). Reele de calculatoare (Curs 7). Aplicaia Acces. Crearea unei baze de date simple n Acces. Crearea interogrilor pe exemplu dat (Curs 8). Reprezentarea informaiei (Curs 9). Sisteme de operare. Algoritmi. Limbaje (Curs 10). Componentele calculatorului (Curs 11). </p></li><li><p>Prelegeri:</p><p>Vineri</p><p>17.00 - 18.20(425/4)</p><p>Orele de laborator:</p><p>Luni14.20 - 15.40 (203/4a)15.55 - 17.15 (206/4a)</p><p>Mari</p><p>14.20 -15.40 (145b/4)</p><p>Miercuri</p><p>15.55 - 17.15(203/4a)17.30 - 18.50(203/4a)</p><p>Joi</p><p>15.55 - 17.15(206/4a)17.30 - 18.50(206/4a)</p></li><li><p>Curs 1</p><p>Programarea logic n Prolog</p></li><li><p>Curs1. Programarea logic n PrologIntroducere in Prolog. Principalele caracteristici ale limbajului Prolog.Structura programelor Turbo Prolog. Seciunile unui program n Turbo Prolog. Elemente constitutive: tipuri de date, clauze, fapte, interogri (goal), reguli, constante, variabile, predicate aritmetice, intrri, ieiri.Procesarea programelor Prolog, cutarea soluiilor. Backtracking-ul.Recursivitate. Simulri de cicluri. </p></li><li><p>Introducere in Prolog Una din principalele idei ale programarii logice este aceea c un algoritm este constituit din doua elemente disjuncte: logic i control. Componenta logica corespunde definitiei problemei ce trebuie solutionata, n timp ce componenta control stabileste cum poate fi obinuta soluia. n limbajul Prolog un programator trebuie sa descrie numai componenta logica a unui algoritm (s specifice problema ce trebuie soluionata), lsnd controlul executarii sa fie exercitat de sistemul de programare logica utilizat. Astfel limbajul logic poate fi conceput simultan ca limbaj de descriere, specificare formala a problemei i ca un limbaj de programare a calculatoarelor. Limbajul Prolog este doar un caz particular de abordare a programarii logice. Limbajul Prolog ( PROgrammation en LOGique) a fost creat la Marsilia la inceputul anilor 70, inventatorii" fiind Alain Colmeraurer si Philippe Roussel. </p></li><li><p>Principalele caracteristici ale limbajului Prolog Fundamentele teoretice se gasesc in metoda demonstrarii automate dezvoltata incepand cu 1965 dupa metoda rezolutiei data de Julian Robinson. Un rol important l-a avut si R. Kowalski prin demonstrarea faptului ca se poate programa folosind logica. In limbajul Prolog se poate face orice ca si in alte limbaje de programare. Insa Prologul are avantaje distincte precum si dezavantaje. Prologul poate manui numere, insa nu asa de eficient ca un limbaj special destinat acestui lucru. Prologul, insa, este orientat pe manipularea simbolurilor. Ori manipularea simbolurilor este inima a ceea ce a devenit astazi cunoscut sub numele de Inteligenta Artificiala. </p></li><li><p>Principalele caracteristici ale limbajului Prolog</p><p>1. Este un limbaj de programare logica centrat pe date. Se deosebeste de Pascal, C care sunt limbaje imperative, centrate pe proces. Paradigma fundamentala a programarii logice este cea de programare declarativa. Focusul programarii logice este identificarea notiunii de calcul si notiunii de deductie. Se bazeaza pe deductia liniara folosind clauze Horn. Se foloseste pentru a exprima relatii intre obiecte si a obtine informatii referitoare la obiecte si relatiile dintre ele.</p></li><li><p>Principalele caracteristici ale limbajului Prolog2. Este un limbaj descriptiv A scrie un program pentru calculator inseamna 2 lucruri: &lt; CE &gt;: specificarea exacta a rezultatelor dorite; &lt; CUM &gt;: proiectarea metodei prin care se obtin aceste rezultate. Un limbaj este descriptiv daca accentul cade pe primul aspect (CE), alegerea metodei fiind lasata pe seama calculatorului. Un limbaj procedural este unul in care trebuie proiectata si metoda de obtinere a rezultatelor. 3. Este folosit in: - programarea unor aplicatii in Inteligenta Artificiala - dezvoltarea sistemelor expert - procesarea limbajului natural (inclusiv traducere automata) - robotica - teoria jocurilor - procesari de natura logica </p></li><li><p>Structura programelor Turbo Prolog Implementare a Prolog-ului pentru calculatoare personale IBM PC si compatibile. Este un compilator foarte rapid lansat in 1988 de Borland International, cu multe predicate predefinite. Castigul in viteza s-a obtinut cu urmatorul pret: - necesitatea declararii predicatelor si a tipurilor folosite; - mai putin dinamic (regulile nu pot fi adaugate sau sterse); - nu exista predicatul 'call'; - limitarea in amestecul tipurilor; - imposibilitatea utilizarii unui simbol de predicat ca functie. Fisiere importante pentru TP prolog.exe : compilatorul de Turbo Prolog prolog.err : mesajele de eroare prolog.hlp : fisierul de help online </p></li><li><p>Structura programelor Turbo Prolog Mediul de programare TP Lansarea: &gt; prolog </p><p>Meniul principal: Files, Edit, Run, Compile, Options, Setup Dupa ce a fost lansat aplicaia Prolog, se tasteaz Enter. Maximizarea/redimensionarea ferestrei de aplicaie Alt+Enter.</p></li><li><p>Structura programelor Turbo PrologFerestrele din TP : </p><p>Editor, Dialog, Message, Trace Activarea meniului Files:</p><p>Alt+F</p><p>Editarea:</p><p>Alt+E</p><p>Lansarea:</p><p>Alt+R</p></li><li><p>Structura programelor Turbo PrologRularea unui program, accesarea ferestrei Dialog: </p><p>Run sau Alt+R </p></li><li><p>Structura programelor Turbo Prolog:Un program Prolog este divizat n seciuni. Seciunile Prolog sunt: domains, global domains, database, predicates, global predicates, clauses, goal.</p><p>Unele seciuni putem s le omitem, dac ele nu se utilizeaz. De exemplu, dac nu utilizm bazele de date dinamice, atunci seciunea database nu se include n program.</p><p>Seciunile unui program TurboProlog</p></li><li><p>Programul acelasi_parinte i ferestre Turbo Prolog.Seciunile unui program TurboProlog</p></li><li><p>n seciunea domains se includ tipurile de obiecte (domeniul obiectelor) definite de utilizator:</p><p>domains lista_nume_dom_def1 = tip1lista_nume_dom_def2 = tip2 . . . . . . . . . . . . . . . . . . . . . . . .unde lista_nume_dom_def este o list din unul sau mai multe domenii ce se definesc la fel. Numele domeniului este un identificator. Seciunile unui program TurboProlog</p></li><li><p>Exist mai multe moduri de definire a domeniilor. Cel mai simplu mod de definire este:dom = d</p><p>unde dom este numele domeniului, iar d este unul dintre tipurile: char, symbol, string, integer, real.</p><p>Exemplu.s = symbolnume, prenume, oras = string</p><p>Seciunile unui program TurboProlog</p></li><li><p>n seciunea predicates se declar structura tuturor predicatelor din program. Forma general este: nume_predicat(d1, d2, )unde d1, d2, sunt domeniile argumentelor ce sunt definite anterior sau standarde. nume_predicat trebuie sa inceapa cu o litera (de preferat mica), urmata, eventual, de o secventa de litere, cifre si underscore (_). Lungimea numelui trebuie sa fie mai mica de 250. Aritatea unui predicat este numarul de argumente; doua predicate cu acelasi nume pot avea aritati diferite. Ele trebuie declarate in sectiunea de predicate si corpul lor in sectiunea de clauze.Exemplu: domains s = symbolpredicatesvirsta(s, integer)Seciunile unui program TurboProlog</p></li><li><p>Seciunea clauses conine baza de cunotine. n aceast seciune se scriu faptele i regulile. Clauzele cu conjuncii sunt relaii care au forma: T :- Q1, Q2, , Qn . n Turbo Prolog se poate scrie i astfel: T if Q1 and Q2 and and Qn .T este capul clauzei, Q1, Q2, , Qn formeaz corpul clauzei. Q1, Q2, , Qn subscopuri. Clauzele cu disjuncii sunt relaii care au forma: T :- Q1; Q2; ; Qn . Se poate scrie i astfel: T if Q1 or Q2 or or Qn .n seciunea goal se conine o interogare (scop extern). Dac aceast seciune lipsete, atunci interogrile se fac din fereastra de dialog (scop intern).Comentariile pot fi incluse ntre caracterele /* i */ . Caracterul % poate fi utilizat pentru comentariile de pe o linie.Seciunile unui program TurboProlog</p></li><li><p>Exemplu. Programul Prinii:</p><p>domainss=symbol</p><p>predicatesacelasi_parinte(s,s)femeie(s)barbat(s)sora(s,s)parinte(s,s)</p><p>Seciunile unui program TurboProlog</p></li><li><p>clausesparinte(ion,ada). % Ion este parintele Adeiparinte(petru,ion).parinte(petru,maria).parinte(suzana,ion).parinte(ion,angela).parinte(suzana,maria).parinte(andrei,ion).femeie(ada).femeie(maria).femeie(suzana).femeie(angela).barbat(ion).barbat(petru).Seciunile unui program TurboProlog</p></li><li><p>acelasi_parinte(X,Y):parinte(P,X), parinte(P,Y), XY. sora(A,B):acelasi_parinte(A,B), femeie(A).goal sora(X,Y),write(Surori:,X, si , Y).</p><p>Exerciii.1. Pentru programul Prinii, n fereastra de dialog, s se formuleze urmtoarele goal-uri: Goal: acelasi_parinte(ion, X) Goal: sora(X, ada) Goal: acelasi_parinte(maria, Y), barbat(Y) Goal: sora(X, Y)S se explice rspunsurile obinute.</p><p>2. S se dezvolte programul Prinii pentru a determina care dintre persoane sunt veri, sau verioare.Seciunile unui program TurboProlog</p></li><li><p>Exemplu.are(ana,carte).are(ana,masina).are(dan,calculator).are(dan,masina).Interogarea vom realiza-o n fereastra de dialog. Dac formulm scopul: Goal: are(ana,masina)atunci rspunsul va fi: YES, ntruct scopul este satisfcut de ctre baza de cunotine. Dac formulm scopul: Goal: are(ana,calculator)atunci rspunsul va fi: NO. La interogarea: Goal: are(ana,X)se rspunde: X=carte X=masina 2 Solutions.Entitati PROLOG: Intrebarile (exemplu)</p></li><li><p>Tipurile de dateSectiunea de domenii este la fel ca in celelalte limbaje de programare. Domeniile de baza sunt: char integer real string symbol - char - caractere intre apostof; Caracterul '\n' inseamna secventa escape "new line", adica trecere la rand nou, iar '\251' inseamna caracterul ASCII cu codul 251; - integer - reprezinta multimea numerelor intregi cuprinse intre -32768 si 32767; </p></li><li><p>Tipurile de date- real - daca notam prin "D" o cifra (digit), atunci un numar real poate avea una din formele: DDDDDDD DDDDDDD.DDDDDDD [+|-]DDDDD[.]DDDDDDD[e[+|-]DDD] Numerele "reale" din acest domeniu sunt din intervalul [10^{-307},10^{308}] reunit cu [-10^{308},-10^{-307}]; - string - reprezinta orice secventa de caractere scrise intre ghilimele. Lungimea unui sir (string) este mai mica de 255 caractere; - symbol - sunt permise doua forme: * o secventa de litere, numere si underscore (_), cu singura restrictie ca prima litera este mica; * o secventa de caractere marcata de ghilimele (aceasta este folosita cand vrem sa introducem spatii sau litera mare la inceput). </p></li><li><p>Tipurile de dateExemple.</p><p>char: A, a, 5,!, +symbol: x1, X1, ion, Prolog, Turbo Prologstring: x1, X1, ion, Prolog, Turbo Prolog, Ada, +integer: 5, -35, 0real: 5.0, -2.5, 2.6e+4</p><p> Pentru datele de tipul symbol spre deosebire de tipul string, se creeaz un tabel care se pstreaz n memoria intern i deci cutarea este mai rapid.</p></li><li><p>Termenii in Prolog </p><p> Termenii sunt formati dintr-o multime de caractere. </p><p>Caracterele recunoscute in Prolog se divizeaza in patru categorii: -multimea de litere majuscule: A B C D ... X Y Z </p><p> -multimea de litere minuscule: a b c d ... x y z </p><p> -multimea de caractere numerice: 0 1 2 3 4 5 6 7 8 9 </p><p> -multimea de caractere speciale: ! " # $ % ' ( ) = - ~ " \ | { } [ ] _ ' @ + : ; * &lt; &gt; , . ? / </p></li><li><p> Termenii in PrologTermeniSimpliStructuraiConstanteVariabileAtomiNumereTermenul este singura structura de date utilizata in programarea logica. Sintaxa termenilor structurati e asemanatoare cu cea a faptelor. Deci, un predicat poate fi considerat ca un termen structurat al carui functor este numele predicatului, iar argumentele reprezinta componentele termenilor structurati. Acesl lucru este utilizat in diverse implementari Prolog pentru tratarea uniforma si sinteza dinamica de programe.</p><p>Structura ierarhic ce grupeaza multimea de termeni Prolog </p></li><li><p>Un termen structurat se defineste de functorul su, componentele sale i arietatea sa (numrul de componente). Considerm un exemplu. autor(grigore,vieru)</p><p>Functorul este autor, arietatea 2. Componentele unui termen structurat poate fi la rndul lor termeni structurai.cartea(mama_graiul,autor(grigore,vieru))</p><p>Un termen structurat poate fi reprezentat sub forma unui arbore a crui rdcin e simbolul funcional (functorul), numrul de descendeni ai rdcinii fiind arietatea (numrul de componente ale termenului structurat), ordonarea descendenilor corespunde ordonrii componentelor. Dac o component este un termen structurat, ea se descompune n acelai mod.Termenii in Prolog</p></li><li><p> Termenii in Prologcarteaautormama_graiulgrigorevieruReprezentarea structurii ierarhice a termenului structurat cartea(mama_graiul,autor(grigore,vieru))</p></li><li><p> Constantele definesc obiecte specifice, particulare, sau relaii particulare. Exist dou tipuri de constante: atomi i numere. Atomii sunt constante simbolice care ncep, de obicei, cu o liter i pot conine litere, cifre i caracterul _. Exist i alte caractere ce pot forma atomi speciali, care au o semnificaie aparte n limbaj. Atomii pot desemna:obiecte constante care sunt argumentele predicatelor, de exemplu atomii mihai i maria n faptul parinte(mihai,maria); predicate Prolog sunt: definite de utilizator predefinite n sistem; atomi speciali, de exemplu atomii :- i ?- ; diverse reguli de construcie sintactic a atomilor depind de implementare. </p><p>Constantele: atomi</p></li><li><p>Numerele pot fi ntregi sau reale; sintaxa particular acceptat ct i domeniile de definiie depinznd de implementare. Numere pot fi pozitive sau negative. -12, 7.1, 24Variabilele sunt, din punct de vedere sintactic, tot atomi, dar ele au o semnificaie special. Spre deosebire de regulile generale admise pentru construcia atomilor, numele unei variabile poate ncepe i cu simbolul _, ceea ce indic o variabil anonim.Utilizarea unei variabile anonime semnific faptul c nu ne intereseaz valoarea la care se va instania acea variabil.Din punctul de vedere al conveniei Prolog, numele oricrei variabile trebuie s nceap fie cu liter mare, fie cu _. Variabila, _variabila, Alta_vaRiabila2 sunt variabile.</p><p>Constantele: numere. Variabile</p></li><li><p> Unificarea este procesul de 'potrivire' a doua predicate prin asignarea de valori unor variabile astfel incat cele doua predicate sa devina identice. Caracteristicile...</p></li></ul>