Sunteți pe pagina 1din 8

MINISTERUL EDUCAIEI I TINERETULUI AL REPUBLICII MOLDOVA Universitatea Liber Internaional din Moldova Facultatea Informatic i Inginerie

LUCRARE DE LABORATOR Nr.1

La obiectul: Programarea Prolog

Tema:

Nucleul limbajului Prolog

Lector: Realizat:

Pelin N. studentul gr. IA-1121 Oleinicov Grigore

Chiinu 2013
1

LUCRARE DE LABORATOR Nr.1 Tema: Nucleul limbajului Prolog Scopul lucrarii: Realizarea arborelui genealogic al familei noastre in limbajul de programare Prolog. Aspecte teoretice: Limbajul de programare Prolog este cel mai raspindit limbaj de programare astazi pentru aplicatia Inteligentei Artificiale. Prolog (programming in logic) in 1972 a aparut ca limbaj de programare, produs al unei scolii franceze de informatica de la Universitatea Marselle. Initial limbajul Prolog a fost utilizat in special de cercetatori din domeniul procesarii limbajului natural. Facilitari ale limbajului Prolog: O gama larga standart de predicate pentru operatii string, fisiere, grafica, meniuri. Interfete cu alte limbaje de programare. Artimetica in virgula fixa si mobile. Posibilitatea proiectarii bazei de date dinamice si baze de date externe. In Prolog sunt doua tipuri de legaturi: Legaturi unare : negatia; Legaturi binare: conjunctiva; disjunctia; implicatia; echivalenta. Principiile programarii logice: Disjunct vid - ; Strategii de cautare; Principiul de rezolutie; Principiul de unificare; Back tracking. Disjunct vid (se noteaza - ) nu dispune de nici o litera, este unic din multimea disjunctiilor care este indentificat prin fals. Strategii de cautare a solutiilor: cautarea in adincime (de sus in jos, de la stinga la dreapta); cautarea in latime (pe orizontala, de la stinga la dreapta); Principiul de rezolutie metoda de inferenta si poate fi defenit astfel: pq si pr, de unde rezulta pr (pr rezolventa). Exemplu: Toti oamenii sunt muritori. Denis este om. Denis este muritor.
2

Principiul de unificare pentru a aplica principiul de rezolutie asupra predicatelor este necesar ca ele in prealabil sa fie unite. Unificatorul a doi termeni numim o substitutie care transforma acesti termeni in termeni autentici. Exemplu: predicat(mama, copil) parinte(ina, lena) In limbaj natural: Care este copilul lui ina? In limbajul Prolog: ?parinte(ina, X). Daca o variabila cu valoare se intilneste cu alta variabila care are valoare se numeste comparatie. Termenul 1 Termenul 2 Rezultat Variabila are valoare Variabila are valoare Comparatite Variabila are valoare Variabila n-are valoare Unificare Variabila n-are valoare Variabila are valoare Unificare Intitatile limbajului Prolog: Sintaxa are doua aspecte: descrierea terminologiei; descrierea componentelor. Limbajul Prolog deosebeste patru categorii de simboluri: minuscule (ex:a, b, c); majuscule (ex:A, B, C); cifre (ex:1, 2, 3); caractere speciale (ex:-, +, &, @, ?). Termenii se divid in simpli si compusi. Termen Simpla Constante Variabile Compusa

Atom Numere Atom se formeaza din combinatia celor patru categorii de simboluri; se incep cu litere minuscule, apoi urmata de alti atomi (ex: aTom1). Varialiba se incepe cu litere majuscule (ex:Variabila). Constanta descrierea dintre obiecte. In limbajul Prolog sunt trei componente (disjunctii lui Horn): fapte(clauze\conditii); intrebari(scop); reguli. Partea practica: 1. Fapte exprima relatii intre obiecte. Exemplu: In limbajul natural: Ciinele latra. In limbajul Prolog: latra(ciinele). Unde sirul de simboluri latra este numele de relatii, care se numeste nume de predicat sau functor, iar ciinele este obiectul antrenat in aceasta relatie. Predicatul
3

latra are un argument ciinele, care este inclus in paranteze rotunde, daca predicatul are doua sau mai multe obiecte ele sunt dispartite prin virgule si se numeste predicat binar. Exemplu: latra(ciinele, frumos). Prin aritatea unei funcii nelegem numrul parametrilor si. Exemplu: femeie(lena). n=1 casatorit(andrei, lena). n=2 menu n=0 Atunci cind se declara o relatie dintre obiecte trebuie sa se atraga atentie la numarul de obiecte puse in relatie si ordinea acestora, deoarece pentru Prolog orice fapt nu este decit o singura consecutivitate de simboluri si nu-i asociaza nici un sens, nici o semnificatie. Multimea tuturor faptelor formeaza baza de fapte. In prolog sunt patru sectiuni: Domains-se declara tipurele de date in prolog. symbol Simboluri integer Numere string VaRiAbiLe char Litere

Predicates-se declara structura la fapte.

Clauses-se afla faptele si elemenetele.

Goal-aici se scriu intrebarile. Goal este de doua tipuri: intern si extern. 2. Intrebari se mai numesc si scopuri; se deosebesc de unele sisteme prin simboluri: :-, ?-. A raspunde la o intrebare pusa in program consta in determinarea daca ea poate fi dedusa de program utilizind principiul de deductie. Daca programul contine un fapt ce coincide cu intrebarea, atunci raspunsul va fi YES, in caz contrar ne va afisa NO. Exemplu: ?-parinte(maia, zinaida).\\raspunsul v-a fi:YES; ?-parinte(eugenia, ana).\\raspunsul v-a fi:NO. Raspunsul NO semnifica numai ca faptul nu este in baza de date. Reguli relatii dintre fapte. Prologul permite de-a formula reguli de tipul: un fapt A este adevarat, daca un fapt B sau C sunt adevarate. Exemplu: sora(X, Y):A parinte(Z, X), B parinte(Z, Y), femeie(X), X<>Y. C O regula este alcatuita din: cap mama(X, Y):corp parinte(X, Y), femeie(X). Tipuri de intrebari: ?-bunica(nume, X) ?-bunica(X, nume) ?-bunica(nume, nume) ?-bunica(X, Y)

Listingul programului:
domains s=symbol predicates barbat(s) femeie(s) parent(s,s) tata(s,s) mama(s,s) copil(s,s) frate(s,s) sora(s,s) nepot(s,s) bunica(s,s) bunel(s,s) parent_parent(s,s) stramos(s,s) clauses barbat("Grigore"). barbat("Alex"). barbat("Timur"). barbat("Grisa"). femeie("Liuda"). femeie("Patricia"). femeie("Silvia"). femeie("Victoria"). femeie("Alina"). parent("Grigore","Silvia"). parent("Grigore","Victoria").
6

parent("Liuda","Silvia"). parent("Liuda","Victoria"). parent("Silvia","Grisa"). parent("Alex","Grisa"). parent("Silvia","Alina"). parent("Alex","Alina"). parent("Timur","Patricia"). parent("Victoria","Patricia"). mama(X,Y):-parent(X,Y),femeie(X). tata(X,Y):-parent(X,Y),barbat(X). copil(Y,X) :-parent(X,Y). frate(X,Y):-parent(Z,X),parent(Z,Y),barbat(X). sora(X,Y) :-parent(Z,X),parent(Z,Y),femeie(X). bunica(X,Y):-parent_parent(X,Y),femeie(X). bunel(X,Y):-parent_parent(X,Y),barbat(X). nepot(X,Z) :-copil(X,Y),copil(Y,Z). parent_parent(X,Z):-parent(X,Y),parent(Y,Z). stramos(X,Z) :-parent(X,Z). stramos(X,Z) :-parent(X,Y),stramos(Y,Z).

Arborele Genealogic:

Silvia Alex Liuda Grigore Victoria Timur

Alina Grisa Patricia

Concluzie: Realizind lucrarea de laborator numarul 1, cu tema Nucleul limbajului prolog. Unde trebuia sa realizam arborele genealogic al familei noastre in limbajul de programare Prolog si sa determinam gradul de rudenie cu ajutorul intrebarilor. Am creat si am verificat cu certitudine ca intradevar arborele functioneaza totalmente dupa cerintele necesare.