prolog laborator

7
Conditia: Să se construiască un arbore genealogic arbitrar care să conţină cel puţin 4 nivele(generaţii). Să se descrie regulile pentru diverse relaţii de rudenie. Să se formuleze diferite interogări asupra programului. Programul: domains s=symbol predicates femeie(s) barbat(s) parinte(s,s) mama(s,s) tata(s,s) sora(s,s) frate(s,s) fiu(s,s) fiica(s,s) bunel(s,s) bunica(s,s) strabunica(s,s) strabunel(s,s) var(s,s) vara(s,s) unchi(s,s) matusa(s,s) copil(s,s) nepot1(s,s) nepoata1(s,s) nepot2(s,s) nepoata2(s,s) clauses femeie(livia). femeie(daniela). femeie(svetlana). femeie(irina).

Upload: cuschevici-mihaela

Post on 15-Nov-2015

121 views

Category:

Documents


21 download

DESCRIPTION

Prolog

TRANSCRIPT

Conditia:

S se construiasc un arbore genealogic arbitrar care s conin cel puin 4 nivele(generaii). S se descrie regulile pentru diverse relaii de rudenie.S se formuleze diferite interogri asupra programului.

Programul: domainss=symbolpredicatesfemeie(s)barbat(s)parinte(s,s)mama(s,s)tata(s,s)sora(s,s)frate(s,s)fiu(s,s)fiica(s,s)bunel(s,s)bunica(s,s)strabunica(s,s)strabunel(s,s)var(s,s)vara(s,s)unchi(s,s)matusa(s,s)copil(s,s)nepot1(s,s)nepoata1(s,s)nepot2(s,s)nepoata2(s,s)clausesfemeie(livia).femeie(daniela).femeie(svetlana).femeie(irina).femeie(gabriela).femeie(agrepina).femeie(maria1).femeie(maria2).femeie(ecaterina1).femeie(ana).femeie(ecaterina2).barbat(ilia).barbat(nicolae1).barbat(boris1).barbat(boris2).barbat(adrian).barbat(valentin).barbat(gabriel).barbat(vasile1).barbat(nicolae2).barbat(trofim).barbat(avacom).Barbat(vasile2).barbat(petru).parinte(trofim,agrepina).parinte(maria2,agrepina).parinte(avacom,vasile1).parinte(ecaterina1,vasile1).parinte(vasile2,maria1).parinte(ana,maria1).parinte(petru,nicolae2).parinte(ecaterina2,nicolae2).parinte(agrepina,ilia).parinte(vasile1,ilia).parinte(agrepina,nicolae1).parinte(vasile1,nicolae1).parinte(agrepina,boris1).parinte(vasile1,boris1).parinte(maria1,svetlana).parinte(nicolae2,svetlana).parinte(maria1,boris2).parinte(nicolae2,boris2).parinte(ilia,livia).parinte(svetlana,livia).parinte(ilia,daniela).parinte(svetlana,daniela).parinte(nicolae1,irina).parinte(raisa,irina).parinte(boris1,adrian).parinte(valentina,adrian).parinte(boris1,valentin).parinte(valentina,valentin).parinte(boris2,gabriel).parinte(claudia,gabriel).parinte(boris2,gabriela).parinte(claudia,gabriela).mama(X,Y):-femeie(X),parinte(X,Y).tata(X,Y):-barbat(X),parinte(X,Y).sora(X,Y):-femeie(X),parinte(Z,X),parinte(Z,Y),XY.frate(X,Y):-barbat(X),parinte(Z,X),parinte(Z,Y),XY.fiu(X,Y):-barbat(X),parinte(Y,X).fiica(X,Y):-femeie(X),parinte(Y,X).bunel(X,Y):-barbat(X),parinte(X,Z),parinte(Z,Y),XY.bunica(X,Y):-femeie(X),parinte(X,Z),parinte(Z,Y),XY.strabunica(X,Y):-femeie(X),parinte(X,Z),parinte(Z,K),parinte(K,Y),XY.strabunel(X,Y):-barbat(X),parinte(X,Z),parinte(Z,K),parinte(K,Y),XY.var(X,Y):-barbat(X),bunel(Z,X),bunel(Z,Y),bunel(K,X),bunel(K,Y),XY.vara(X,Y):-femeie(X),bunel(Z,X),bunel(Z,Y),bunel(K,X),bunel(K,Y),XY.unchi(X,Y):-barbat(X),parinte(Z,Y),frate(X,Z).matusa(X,Y):-femeie(X),parinte(Z,Y),sora(X,Z).copil(X,Y):-parinte(Y,X).nepot1(X,Y):-barbat(X),parinte(Z,X),parinte(Y,Z),XY.nepoata1(X,Y):-femeie(X),parinte(Z,X),parinte(Y,Z),XY.nepot2(X,Y):-barbat(X),copil(X,Q),frate(Q,Y),XY.nepot2(X,Y):-barbat(X),copil(X,Q),sora(Q,Y),XY.nepoata2(X,Y):-femeie(X),copil(X,Q),sora(Q,Y),XY.nepoata2(X,Y):-femeie(X),copil(X,Q),frate(Q,Y),XY.

Executia programului:

Relatia de mama, tata si fiica: Relatia de copil:

Relatia de bunel, bunica si var: Relatia de frate, sora si fiu:

Relatia de strabunel si strabunica: Relatia de unchi:

Comentariu:In programul dat la compartimentul DOMAINS a fost definit o singura variabila s de tip symbol. Tipul symbol a fost ales datorita faptului convenirei bune la conditiile laboratorului, in el lucrinduse cu sire de simboluri (prenumi). La compartimentul PREDICATES au fost definite predicatele ce au fost anterior declarate in compartimentul CLAUSES, unele fiind definite ca lucruri deja cunoscute, altele ca reguli cu ajutorul cunostintelor de baza.In comartimentul CLAUSES au fost definite toate femeile, toti barbati si toate relatiile de parinti. Astfel, datorita acestor cunostinte de baza s-au putut fi definite celelalte reguli:

1) Regula mama(X,Y), ceea ce inseamna ca X este mama lui Y, a fost definita astfel:mama(X,Y):-femeie(X),parinte(X,Y). In aceasta formula se defineste faptul ca X se afla in relatie de mama cu Y, atunci si numai atunci cind X poseda proprietatea de femeie si X se afla in relatia de parinte cu Y.

2) Regula tata(X,Y), ceea ce inseamna ca X este tatal lui Y, a fost definita astfel:tata(X,Y):-barbat(X),parinte(X,Y). In aceasta formula se defineste faptul ca X se afla in relatie de tata cu Y, atunci si numai atunci cind X poseda proprietatea de barbat si X se afla in relatie de parinte cu Y.

3) Regula frate(X,Y), ceea ce inseamna ca X este fratele lui Y, a fost definita astfel:frate(X,Y):-barbat(X),parinte(W,X),parinte(W,Y). In aceasta formula se defineste faptul ca X se afla in relatie de frate cu Y, atunci si numai atunci cind X poseda proprietatea de barbat si exista un oarecare W, care se afla in relatie de parinte paralel si cu X, si cu Y.

4) Regula sora(X,Y), ceea ce inseamna ca X este sora lui Y, a fost definita astfel:sora(X,Y):-femeie(X),parinte(W,X),parinte(W,Y). In aceasta formula se defineste faptul ca X se afla in relatie de sora cu Y, atunci si numai atunci cind X poseda proprietatea de femeie si exista un oarecare W, care se afla in relatie de parinte concomitent si cu X, si cu Y.

5) Regula copil(X,Y), ceea ce inseamna ca X este copilul lui Y, a fost definita astfel:copil(X,Y):-parinte(Y,X). In aceaste formula se defineste faptul ca X se afla in relatie de copil cu Y, atunci si numai atunci cind Y se afla in relatie de parinte cu X.

6) Regula fiica(X,Y), ceea ce inseamna ca X este fiica lui Y, a fost definita astfel:fiica(X,Y):-femeie(X),parinte(Y,X). In aceasta formula se defineste faptul ca X se afla in relatie de fiica cu Y, atunci si numai atunci cind X poseda proprietatea de femeie si Y se afla in relatie de parinte cu X.

7) Regula fecior(X,Y), ceea ce inseamna ca X este fecior al lui Y, a fost definita astfel:fecior(X,Y):-barbat(X),parinte(Y,X). In aceasta formula se defineste faptul ca X se afla in relatie de fecior cu Y, atunci si numai atunci cind X poseda proprietatea de barbat si Y se afla in relatie de parinte cu X.

8) Regula bunel(X,Y), ceea ce inseamna ca X este bunelul lui Y, a fost definita astfle:bunel(X,Y):-barbat(X),parinte(W,Y),parinte(X,W). In aceasta formula se defineste faptul ca X se afla in relatie de bunel cu Y, atunci si numai atunci cind X poseda proprietatea de barbat si se afla in relatie de parinte cu un oarecare W, care la rindul sau se afla in relatie de parinte cu Y.

9) Regula bunica(X,Y), ceea ce inseamna ca X este bunica lui Y, a fost definita astfel:bunica(X,Y):-femeie(X),parinte(W,Y),parinte(X,W). In aceasta formula se defineste faptul ca X se afla in relatie de bunica cu Y, atunci si numai atunci cind X poseda proprietatea de femeie si se afla in relatie de parinte cu un oarecare W, care la rindul sau se afla in relatie de parinte cu Y.

10) Regula unchi(X,Y), ceea ce inseamna ca X este unchiul lui Y, a fost definita astfel:unchi(X,Y):-barbat(X),fecior(Y,W),frate(X,W). In aceasta formula se defineste faptul ca X se afla in relatie de unchi cu Y, atunci si numai atunci cind X poseda proprietate de barbat si se afla in relatie de frate cu un oarecare W, si Y se afla in relatie de fecior cu acelasi W.

11) Regula nepot(X,Y), ceea ce inseamna ca X este nepotul lui Y, a fost definita astfel:nepot(X,Y):-unchi(Y,X), barbat(X). In aceasta formula se defineste faptul ca X se afla in relatie de nepot cu Y, atunci si numai atunci cind X poseda proprietate de barbat si Y se afla in relatie de unchi cu X.

.