Professional Documents
Culture Documents
Sistemul de operare Windows. Operaii cu ferestre, dosare, fiiere, programe, aplicaii. Combinaii de taste operative (Curs 2).
Editorul de texte Microsoft Word. Crearea i redactarea documentelor n Microsoft Word. Crearea tabelelor i efectuarea operaiilor cu elementele tabelelor (Curs 3).
Aplicaia Excel. Calculul tabelelor. Crearea tabelelor, graficelor, diagramelor n Excel i includerea lor ntr-un document pregtit n Microsoft Word (Curs 4).
Prelegeri:
??Orele de laborator:
Joi
Curs 1
Backtracking-ul.
Recursivitate. Simulri de cicluri.
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.
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.
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.
Ferestrele din TP : Editor, Dialog, Message, Trace Activarea meniului Files: Alt+F Editarea: Alt+E Lansarea: Alt+R
Exemplu. s = symbol
nume, prenume, oras = string
Ion
Dan
Vasile
parinte(Parinte,_) Cine este parinte? parinte(_,Copil) Cine este copil? parinte(Parinte, maria) Cine sunt parintii Mariei? parinte(ana,_) Este oare Ana parinte? parinte(_,dan) Este oare Dan copil? parinte(_,_) Exista oare predicatul parinte in baza de cunostinte? parinte(Parinte,Copil) Cine sunt parintii si copiii lor? parinte(ana, maria) Este oare Ana parintele Mariei? parinte(ana, Copil) Cine sunt copiii Anei?
Tipurile de date
Sectiunea 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;
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).
Tipurile de date
Exemple. char: symbol: string: integer: real: A, a, 5,!, + x1, X1, ion, Prolog, Turbo Prolog x1, X1, ion, Prolog, Turbo Prolog, Ada, + 5, -35, 0 5.0, -2.5, 2.6e+4
Nota: 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.
Termenii in Prolog
Caracterele recunoscute in Prolog se divizeaza in patru categorii: -multimea de litere majuscule: A B C D ... X Y Z
-multimea de litere minuscule: a b c d ... x y z
Termenii in Prolog
Termeni Termenul 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.
Simpli
Structurai
Constante
Variabile
Atomi
Numere
Termenii in Prolog
Un termen structurat se defineste de functorul su, componentele sale i arietatea sa (numrul de componente). Considerm un exemplu.
autor(grigore,vieru)
Functorul este autor, arietatea 2. Componentele unui termen structurat poate fi la rndul lor termeni structurai. cartea(mama_graiul,autor(grigore,vieru)) 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
cartea
mama_graiul
autor
grigore
vieru
Constantele: atomi
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.
Unificarea
Unificarea este procesul de 'potrivire' a doua predicate prin asignarea de valori unor variabile astfel incat cele doua predicate sa devina identice. Caracteristicile principale ale unificarii in Turbo Prolog: a) Cand Prolog-ul incearca sa satisfaca un scop, cauta o potrivire incepand cu prima clauza a programului. b) Cand se face un nou apel, cautarea unei potriviri incepe intotdeauna de la inceputul programului. c) Cand un apel a gasit o potrivire, spunem ca a reusit si se va incerca satisfacerea urmatorului subscop. d) Daca o variabila se leaga la o valoare intr-o clauza, singurul mod in care se poate dezlega este prin backtracking.
Backtracking-ul
- La satisfacerea unei conjunctii de scopuri in Prolog, se incearca satisfacerea fiecarui scop pe rand, de la stanga la dreapta. Prima satisfacere a unui scop determina plasarea unui marcaj in baza de cunostinte in dreptul faptului sau regulii care a determinat satisfacerea scopului. - Daca un scop nu poate fi satisfacut (esueaza), sistemul Prolog se intoarce si incearca resatisfacerea scopului din stanga, pornind cautarea in baza de cunostinte de la marcaj in jos. inainte de resatisfacerea unui scop se elimina toate instantierile de variabile determinate de ultima satisfacere a acestuia. Daca cel mai din stanga scop din conjunctia de scopuri nu poate fi satisfacut, intreaga conjunctie de scopuri esueaza.
- Aceasta comportare a sistemului Prolog in care se incearca in mod repetat satisfacerea si resatisfacerea scopurilor din conjunctiile de scopuri se numeste backtracking.
Backtracking-ul
Backtracking-ul este mecanismul prin care Prolog-ul cauta (sistematic) solutia printre faptele si regulile din program. Principiile de baza ale backtrackingului sunt: a) Subscopurile trebuiesc satisfacute in ordine. b) Clauzele sunt testate in ordinea in care apar in program. c) Cand un subscop se unifica cu capul unei reguli, corpul ei se va adauga la multimea de subscopuri care trebuiesc satisfacute. d) Un scop este satisfacut atunci cand sunt satisfacute toate subscopurile sale.
Unificarea
Unificarea are loc atunci cnd: -- predicatele au acelai nume; -- obiectele unificate au acelai nume; -- obiectele i valoarea variabilelor legate sunt identice; -- valorile a dou variabile sunt identice; -- variabilele ce nu sunt legate se leag la valorile obiectelor care se unific; -- variabila anonim nu ia valoare, se unific cu orice; -- dac dou variabile sunt legate, atunci ndat ce una este concretizat (primete valoare) cealalt e legat de aceeai valoare.
Unificarea da nu 12 da nu da nu nu nu
Unificarea da nu nu nu da
Backtracking-ul
Backtracking-ul
S examinm cum sistemul stabilete rspunsul pentru ultima interogare (goal). Pentru ca predicatul acelasi_parinte(X,Y) s fie adevrat e necesar ca predicatele parinte(P,X) i parinte(P,Y) s fie adevrate. De la nceput se suprapun predicatele acelasi_parinte(suzana,Z) din goal cu acelasi_parinte(X,Z) din clauz (regul). n rezultat X se concretizeaz cu "suzana", iar variabila Y se leag cu variabila Z . La urmtorul pas se ncearc s se concretizeze parinte(P,X) pentru X="suzana" cu baza de cunotine i P se concretizeaz cu "maria". La urmtorul pas se ncearc concretizarea parinte(P,Y) pentru P="maria" i se reuete pentru Y="dan". Se obine prima soluie: Z="dan". Deci s-a reuit unificarea formulei din goal cu o regul. Dac goal din fereastra de dialog conine variabile, atunci sistemul caut toate soluiile. n rezultat predicatul parinte(maria,Y) se suprapune cu faptul parinte(maria,suzana) i obinem a doua soluie: Y="suzana".
Dei PROLOG a fost proiectat n primul rnd ca un limbaj de programare simbolic, el dispune de operatorii pentru cele patru operaii aritmetice de baz i operatorii unari minus i plus, la care se adaug operatorii mod (restul mpririi ntregi) i div (impartirea prin trunchiere) Operatori aritmetici
Operatorii aritmetici binari, cum ar fi +, -, *, /. Evaluarea expresiei se face la cerere n cazul n care se foloseste operatorul predefinit infixat is, de exemplu: X is 1 + 2. n Prolog se utilizeaz funciile: X mod Y, X div Y, round(X), trunc(X), abs(X), cos(X), sin(X), tan(X), arctan(X), exp(X), ln(X), log(X), sqrt(X).
OPERATORII PROLOG: Expresii aritmetice si logice Operatori relaionali sunt predicate predefinite. Un astfel de operator este operatorul de egalitate =. Predicatul (operatorul) de egalitate funcioneaz ca i cum ar fi definit prin urmtorul fapt: X = X. iar ncercarea de a satisface un scop de tipul X = Y se face prin ncercarea de a unifica X cu Y. Din aceasta cauz, dndu-se un scop de tipul X = Y, regulile de decizie care indic dac scopul se ndeplinete sau nu sunt urmtoarele: Dac X este variabil neinstaniat, iar Y este instaniat la orice obiect Prolog, atunci scopul reuete. Ca efect lateral, X se va instania la aceeai valoare cu cea a lui Y. De exemplu: ?- carte(barbu, poezii) = X. este un scop care reuete i X se instaniaz la carte(barbu, poezii). Dac att X ct i Y sunt variabile neinstaniate, scopul X = Y reuete, variabila X este legat la Y i reciproc. Aceasta nseamn c ori de cte ori una dintre cele dou variabile se instaniaz la o anumit valoare, cealalt variabila se va instania la aceeai valoare.
Atomii i numerele sunt ntotdeauna egali cu ei nii. De exemplu, urmtoarele scopuri au rezultatul marcat drept comentariu:
n prelucrrile aritmetice realizate n PROLOG semnul = joac un rol special. El este privit ca un operator cu doi operanzi: operand1 = operand2. Urmtoarele reguli determin comportarea acestui operator: Dac unul din operanzi este variabil nelegat i cellalt este un obiect, atunci operatorul leag variabila la obiectul respectiv.
Dac un operand este variabil legat i cellalt este un obiect, atunci Operatorul testeaz dac valoarea legat este aceeai cu obiectul respectiv. Dac un operand este variabil liber, iar cellalt este variabil legat, atunci operatorul leag variabila liber la obiectul legat de cealalt variabil. Dac ambii operanzi sunt variabile legate, atunci operatorul testeaz dac valorile legate sunt aceleai.
Dac expresia conine nmulirea (*) sau impartirea (/, div, mod), aceste operaii se execut urmtoarele, de la stnga la dreapta.
De la stnga la dreapta se execut operaiile adunarea (+) i scderea (-).
Operandul1 ntreg real ntreg real ntreg sau real ntreg ntreg Operatorul +, -, * +, -, * +, -, * +, -, * / div mod Operandul2 ntreg ntreg real real ntreg sau real ntreg ntreg Rezultatul ntreg real real real real ntreg ntreg
?-Z=4mod7 Z=4
?-Y=7div4 %predicatul XdivY gsete partea ntreag Y=1 %de la mprirea lui X la Y, unde X i Y sunt %numere ntregi. ?-Y=7div4 Y=0
factorial(3,3)
N 3
V X
M 2
V=U*3
factorial(2,U)
V=2*3 factorial(2,2)
U=2
stiva
U=>U2
N2 2
V2 U
M2 1
U=U2*2
factorial(1,U2) factorial(1,1)
stiva
U=>U3 V3 U2 M3 0
N3 1
U2=1*1
U2=U3*1 factorial(0,1)
factorial(0,U3)
U3=1
Se ncearc unificarea scopului cu regula factorial(0,1) . Nu se reuete. Se trece la a doua regul care genereaz subscopul factorial(2,U) (apelul al doilea) . Apoi se genereaz subscopul factorial(1, U2 ) (apelul al treilea) i factorial(0, U3) (apelul al patrulea). Subscopul factorial(0, U3) se unific cu prima regul (conditia de limita) i U3 se concretizeaz cu valoarea 1. Acest proces l putem descrie cu ajutorul unei stive (vezi mai jos), care conine cortegii de forma < N, X >. De la nceput n stiv se pune < 3, X > , unde 3 este valoarea legat de N i X este variabil liber. Stiva se trece ntr-o nou stare i se pune < 2, U2 > . Analog se pune n stiv < 1, U3 > . Subscopul factorial(0, U3) se unific cu prima regul i n stiv se pune < 0, 1 > . Acum poate fi examinat subscopul U2 = N * U3. Obtinem: U2=1.
< N, V > a) b) c) d)
Intrri. Ieiri
Predicate de intrare: readln(String) % Citete o linie de text, terminat cu Enter. readint(Integer) readchar(Char) readreal(Real) Aici am utilizat un mod de descriere a operanzilor pe care l vom utiliza i pe parcurs. n paranteze am indicat, c argumentul este o variabil (primul caracter este o majuscul) i tipul ei.
Cu operatorul write putem afia orice tip de obiecte. Formatul general: write(arg1, arg2, , argn) Argumentele sunt obiecte. Operatorul poate fi folosit att n reguli ct i n goal.
Ieiri
Goal: muritor(X),write("muritor:",X),nl
unde nl este un operator de ieire i are semnificaia \n din alte limbaje. Se citete linie nou (newline).
Ieiri
Predicatul writef este analog lui write, n plus are un format conform cruia are loc afiarea. Formatul general este: writef(<format>, arg1, arg2, ..., argn) <format> este un ir de caractere n care se specific formatul pentru fiecare argument. Acest ir trebuie s conin ati specificatori de format, ci argumeni sunt indicai. Specificatorul formatului are forma general: %[-] m.pw unde: - determin alinierea la stnga (implicit la dreapta) m este numrul maxim de poziii p este numrul maxim de poziii pentru partea zecimal w poate fi: f real n zecimal fixat, e real n notaie exponenial, g real scurt (implicit) s string sau symbol w poate fi omis.
Ieiri
Exemplu. Fie X=1.0, Y=3.37, Z=4.5 writef("Sunt numere %1 si %4.1, precum si %-10e",X,Y,Z). Rezultatul va fi: Sunt numere 1 si 3.4, precum si 4.5e+00
Bibliografie
Cotelea V., Programarea n logic, UAM, Chiinu, 2000 S. Lsi, G. Sturza, V. Grigorcea., Turbo Prolog. USM, Chiinu (ediie electronic). Meszaros Judith, Turbo Prolog 2.0 Ghid de utilizare, Editura Albastr, Cluj-Napoca, 1996 ndreanu N., Introducere n Programarea logic. Limbajul Prolog, Editura"Intarf", Craiova, 1994 J. Doores, A.R.Reiblein &S. Vadera., Prolog-programming for tomorrow. Sigma Press.Wilmslow, 1987. http://inf.ucv.ro/~rstoean/courses/pnp/index.html http://thor.info.uaic.ro/~georgie/prolog/ http://www.utgjiu.ro/math/mbuneci/book/exp.html http://www.mariel.ru/mmlab/home/prolog/LECTION2/index.html