Sunteți pe pagina 1din 3

RUDE

tata(andrei,marius).
tata(andrei,radu).
tata(andrei,dan).
tata(marius,aurel).
tata(dan,carmen).
tata(dan,george).
tata(dan,dana).
tata(paul,aurel).
barbat(andrei).
barbat(marius).
barbat(radu).
barbat(dan).
barbat(aurel).
barbat(george).
mama(maria,aurel).
femeie(maria).
femeie(carmen).
femeie(dana).
frati(Y,Z):-tata(X,Y),tata(X,Z),Y\=Z.
verisori(Y,Z):-frati(A,B),tata(A,Y),tata(B,Z).
unchi(X,Y):-frati(X,Z),tata(Z,Y),barbat(X).
CURSURI
curs(ia,timp(vineri,14,18),dzitac,74).
curs(pclp,timp(vineri,14,16),terei,75).
curs(poo,timp(marti,16,19),terei,74).
curs(ia,timp(miercuri,14,16),terei,38).
curs(poo,timp(joi,12,14),terei,75).
profesor(Profesor,Curs) :-curs(Curs,Timp,Profesor,Localizare).
durata(Curs,Durata) :-curs(Curs,timp(Zi,Inceput,Sfarsit),Profesor,Localizare),
Durata is Sfarsit-Inceput.
preda(Profesor,Zi) :curs(Curs,timp(Zi,Inceput,Sfarsit),Profesor,Localizare).
ocupat(Sala,Zi,Timp) :-curs(Curs,timp(Zi,Inceput,Sfarsit),Profesor,Localizare),
Inceput =< Timp, Timp =< Sfarsit.

BACKTRACKING SI CUT
Ex 1:
mananca(ana, mere).
mananca(ana, pere).
mananca(ana, alune).
Interogari:
mananca(ana, X). //ne da cate o solutie
sau
mananca(ana, X), write(X), nl, fail. //ne da toate solutiile
mananca(ana, X), write(X), nl, !. //ne da prima solutie gasita (CUT)
EXAMEN
student(adrian, prezente(8), proiect(bun)).
student(marius, prezente(2), proiect(copiat)).
student(andreea, prezente(9), proiect(bun)).
student(ovidiu, prezente(4), proiect(slab)).
Daca vrem sa aflam care sunt studentii care pot sa ia o nota peste 7, putem folosi interogarea:
student(X, prezente(Y), proiect(bun)), Y > 6, writeln(X), fail.
adrian
andreea
Daca vrem sa aflam care sunt studentii care nu vor intra in examen, putem folosi interogarea:
student(X, prezente(_Y), proiect(copiat)), writeln(X), fail.
marius
SALI SI CURSURI
Sa se aloce o sala pentru o serie de cursuri.
sala(75).
sala(74).
sala(72).
curs(ia).
curs(poo).
curs(tap).
Interogare:
sala(X),!,curs(Y),write(X-Y),nl,fail. //backtracking si cut

AFISAREA ELEMENTELOR UNEI LISTE


afis([]).
afis([Prim | Rest]) :- write(Prim), tab(3), afis(Rest).
NUMARUL ELEMENTELOR DINTR-O LISTA
nr_elem([], 0).
nr_elem([_ | Rest], N) :- nr_elem(Rest, N1), N is N1 + 1.
?- nr_elem([1, 2, 3], X).
X=3
SUMA ELEMENTELOR DINTR-O LISTA
suma([], 0).
suma([P|Rest], S) :- suma(Rest, S1), S is S1 + P.
?- suma([1, 2, 3], X).
X=6
MEDIA ELEMENTELOR UNEI LISTE
media(L) :- nr_elem(L, N), suma(L, S), Media is S/N, write('Media este '), write(Media).
?- media([1, 2, 3]).
Media este 2.