Laborator 5

Laborator 5

Cod:

null.

exists(Key, tree(Key,_,_)):-!.

exists(Key, tree(Root,L,R)):- Root > Key, exists(Key, L);

Root =< Key, exists(Key, R).

add(Key,null,tree(Key,null,null)):-!.

add(Key,tree(Root,L,R),tree(Root,NewL,R)) :- Key<Root,add(Key,L,NewL).

add(Key,tree(Root,L,R),tree(Root,L,NewR)) :- Key>=Root,add(Key,R,NewR).

sum(null, S) :- S is 0,!.

sum(tree(Root, L, R), S) :- sum(L, Snew1), sum(R, Snew2), S is Snew1+Snew2+Root.

countLeaves(null, Count) :- Count is 0,!.

countLeaves(tree(_, null, null), Count) :-Count is 1, !.

countLeaves(tree(_, L, R), Count) :- countLeaves(L, CountNew1),countLeaves(R, CountNew2),

Count is CountNew1+CountNew2.

compute(null, Result) :- Result is 0,!.

compute(tree(Root, null,null), Result) :- Result is Root.

compute(tree(+, L, R), Result):- compute(L, Result1), compute(R, Result2),Result is Result1+Result2.

compute(tree(-, L, R), Result):- compute(L, Result1), compute(R, Result2),Result is Result1-Result2.

compute(tree(*, L, R), Result):- compute(L, Result1), compute(R, Result2),Result is Result1*Result2.

compute(tree(/, L, R), Result):- compute(L, Result1), compute(R, Result2),Result is Result1/Result2.

convert(Expression, tree(Expression, null, null)) :- number(Expression).

convert(A+B, tree(+, L, R)) :- convert(A, L), convert(B, R).

convert(A-B, tree(-, L, R) ):- convert(A, L), convert(B, R).

convert(A*B, tree(*, L, R)) :- convert(A, L), convert(B, R).

convert(A/B, tree(/, L, R)) :- convert(A, L), convert(B, R).