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).