Sunteți pe pagina 1din 9

MINISTERUL EDUCAŢIEI ŞI TINERETULUI AL REPUBLICII

MOLDOVA

Universitatea Liberă Internaţională din Moldova

Facultatea Informatică şi Inginerie

LUCRARE DE LABORATOR Nr.1

La obiectul: Inteligenta artificiala

Tema: Arborele Genealogic

Lector: Obadâ Olesea

Realizat: studentul gr. TI-31


Malancea Denis

Chişinău 2011

1
LUCRARE DE LABORATOR Nr.1

Tema: Arborele Genealogic

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: p˅q si ¬p˅r,
de unde rezulta p˅r (p˅r – 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 Compusa

Constante Variabile

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 funcţii înţelegem numărul parametrilor săi.
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.

4
 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)

5
Listingul programului:

predicates
parinte(symbol,symbol).
bunel(symbol,symbol).
bunica(symbol,symbol).
femeie(symbol).
sora(symbol,symbol).
mama(symbol,symbol).
tata(symbol,symbol).
casatorit(symbol,symbol).

surori(symbol,symbol).
frate(symbol,symbol).
frati(symbol,symbol).
unchi(symbol,symbol).
matusa(symbol,symbol).
verisor(symbol,symbol).
verisoara(symbol,symbol).
ginere(symbol,symbol).
nora(symbol,symbol).
soacra(symbol,symbol).
socru(symbol,symbol).
cumnat(symbol,symbol).
cumnata(symbol,symbol).
cuscri(symbol,symbol).

mama(X, Y):-
parinte(X, Y),
femeie(X).
tata(X, Y):-
parinte(X, Y),
not(femeie(X)).
sora(X, Y):-
mama(Z, X),
mama(Z, Y),
femeie(X),
X<>Y.
surori(X, Y):-
parinte(Z, X),
parinte(Z, Y),
femeie(X),
femeie(Y),
X<>Y.
frate(X, Y):-
tata(Z, X),
tata(Z, Y),
not(femeie(X)),
X<>Y.
frati(X, Y):-
parinte(Z, X),
parinte(Z, Y),
not(femeie(X)),
not(femeie(Y)),
X<>Y.
unchi(X, Y):-
frate(X, Z),
parinte(Z, Y).
matusa(X,Y):-
sora(X,Z),
6
parinte(Z, Y).
bunel(X,Y):-
parinte(X, Z),
parinte(Z, Y),
not(femeie(X)).
bunica(X, Y):-
parinte(X, Z),
parinte(Z, Y),
femeie(X).
verisoara(X, Y):-
parinte(Z, X),
parinte(W, Y),
frate(Z, W),
femeie(X).

verisor(X, Y):-
parinte(Z, X),
parinte(W, Y),
frate(Z, W),
not(femeie(X)).

ginere(X, Y):-
parinte(Y, Z),
casatorit(X, Z),
not(femeie(X)).
nora(X, Y):-
parinte(Y, Z),
casatorit(X, Z),
femeie(X).
soacra(X,Y):-
mama(X, Z),
casatorit(Z, Y),
femeie(X).
socru(X, Y):-
tata(X, Z),
casatorit(Z, Y),
not(femeie(X)).
cumnat(X, Y):-
casatorit(X, Z),
sora(Z, Y),
not(femeie(X)).
cumnata(X, Y):-
casatorit(X, Z),
frate(Z, Y),
femeie(X).
cuscri(X, Y):-
parinte(X, Z),
parinte(Y, W),
casatorit(Z, W).

7
Arborele Genealogic:

8
Concluzie:
Realizind lucrarea de laborator numarul 1, cu tema „ Arborele Genealogic”. 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.

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