Documente Academic
Documente Profesional
Documente Cultură
LUCRARE DE LABORATOR
NR.1
LA DISCIPLINA : INTELIGENTA ARTIFICIALA
A verificat:_________________________
Chisinau 2016
Conditia: Sa se construiasca un arbore genealogic arbitrar care sa contina cel putin 4 nivele
(generatii). Sa se descrie arborele in limbajul PROLOG cu ajutorul urmatoarelor relatii:
parinte(X,Y). /* X este parintele lui Y */
barbat(X). /* X este barbat */
femeie(X). /*X este femeie */
Sa se descrie regulile pentru diverse relatii de rudenie, utilizand numai cele trei relatii descrise
mai sus:
1. mama(X,Y) /* X este mama lui Y */
2. tata(X,Y)
3. frate(X,Y)
4. sora(X,Y)
5. copil(X,Y)
6. fiica(X,Y)
7. fecior(X,Y) /*X este fecior lui Y */
8. bunel(X,Y)
9. bunica(X,Y)
10. unchi(X,Y)
11. nepot(X,Y)
12. stramos(X,Y) /* X este stramos pentru Y regula recursiva */
13. urmas(X,Y)
14. var(X,Y)
15. vara(X,Y)
16. areCopii(X)
17. esteBunel(X)
18. esteBunica(X) /* X este Bunica */
19. areFrati(X)
20. areVeri(X)
21. esteSora(X)
22. mos(X,Y)
23. areSotie(X)
24. areMos(X)
25. areMatusa_1(X)
26. areStramos(X)
27. areUnchi(X)
28. esteNepot_2(X)
29. sot(X,Y)
30. sotie(X,Y)
31. casatorit(X,Y)
32. strabunica(X,Y)
33. nepoti_1(X,Y)
34. nepoata_2(X,Y)
35. nepotB(X,Y) /* X este nepotB p/u Y */
Programul:
casatorit(anastasia,vasile).
casatorit(laila,omar). /*Laila este casatorita cu
omar*/
casatorit(valentina,maxim).
casatorit(ana,anatoli).
casatorit(maria,vilaiat).
casatorit(natasa,dumitru).
casatorit(nadea,nariman).
casatorit(lilea,constantin).
casatorit(angela,alexandru).
casatorit(olga,nicolae).
5
mos(X,Y) :- frate(X,Z),parinte(Z,Y),barbat(X),X<>Y. /*X mosu lui Y, daca X
este frate p/u Z, si Z este parinte p/u Y, si X este barbat*/
matusa_1(X,Y) :-sora(X,Z),parinte(Z,Y),femeie(X),X<>Y.
matusa_2(X,Y) :- sotie(X,Z),mos(Z,Y),femeie(X),X<>Y. /*X este matusa_2
p/u Y, daca X este sotie p/u Z, si Z este mos p/u Y, si X este femeie, si X sa fie diferit de Y*/
suntFrate_sora(X,Y) :- barbat(X),femeie(Y),parinte(Z,X),parinte(Z,Y).
esteBunel(X) :- copil(Y,Z),parinte(X,Z),barbat(X),X<>Y.
esteBunica(X) :- copil(Y,Z),parinte(X,Z),femeie(X),X<>Y.
esteSotie(X) :- casatorit(X,_),femeie(X). /*X este sotie, daca X este casatorita si
X este femeie*/
esteSot(X) :- casatorit(_,X),barbat(X).
esteMatusa_1(X) :- sora(X,Z),parinte(Z,Y),femeie(X),X<>Y.
esteNepot_2(X) :- barbat(X), nepot_2(X,Y),X<>Y.
areStramos(X) :- parinte(_,X).
areCopii(X) :- parinte(X,_). /*X are copii, daca X este parinte*/
areSotie(X) :- casatorit(_,X), barbat(X).
areMatusa_1(X) :- matusa_1(_,X).
areMos(X) :- mos(_,X). /*X are mos, daca oricine este mos p/u X*/
areUnchi(X) :- unchi(_,X).
areVeri(X):- var_1(_,X);vara_1(_,X).
areFrati(X) :- frate(_,X);sora(_,X). /*X are frati, daca oricine este frate p/u X , sau
oricine este sora p/u X */
/*Pentru a defini relatia stramos prin recursivitate avem nevoie de o metoda car garanteaza
terminarea executiei unuei proceduri recursive. O astfel de metoda poate fi implementata
folosind o clauza care enunta condiitile de margine in care o relatie este valida. Pentru arborele
meu genealogic aceasta conditie este relatia parinte, care are sensul ca o relatie de
stramos intre doua persoane este valida la margine, cand una dintre persoane este parintele
celeilalte. De aceea trebuie sa adaugam in baza de reguli o clauza noua, clauza 1. Ea
actioneaza ca o conditie de margine a relatiei definite. (PROLOG admite recursivitatea in sensul
ca acelasi nume de predicat poate aparea si in capul unei reguli si in corpul ei.) */
6
Concluzii:
Executnd programul prin limbajul Prolog, am aflat cum s definesc regurile. Este alctuit din
sintaxa simpl, m-am antrenat prin aplicarea interogarilor. Am neeles cum lucreaz el, deci are
logica sa si este destul de clar. Relaiile sau explicat cu suficien n aa mod sa opinut
rezultatul corect. In program s-a folosit recursivitatea. Mi-a prut bine folosirea acestui limbaj.