Laborator 6
present(Item,[Item|_]).
present(Item,[_|Tail]) :-present(Item,Tail).
concatenating([],List,List).
concatenating([Head|Tail],List,[Head|ResultedTail]) :-concatenating(Tail,List,ResultedTail).
predecessors(Item,EntireList,ListOfPredecessors) :-append(ListOfPredecessors,[Item|_],EntireList).
successors(Item,EntireList,ListOfSuccessors) :-append(_,[Item|ListOfSuccessors],EntireList).
insertElement(Element, [], [Element]):-!.
insertElement([], List, List):-!.
% insertElement(Element, List , NewList) :- append(Element, List,NewList).
insertElement(Element, List, [Element|List]).
insertElement(Element,[H|T], [H|NewT]) :- insertElement(Element, T, NewT).
deleteElement(Element,[Element|T],T).
deleteElement(Element,[H|T], [H|NewT]) :-deleteElement(Element, T, NewT).
deleteAllOccurrences(_,[],[]):-!.
deleteAllOccurrences(Element, [Element|[]], []):-!.
deleteAllOccurrences(Element, [Element|T], NewT):- deleteAllOccurrences(Element, T, NewT).
deleteAllOccurrences(Element, [H|T], [H|NewT]) :- Element=\=H, deleteAllOccurrences(Element, T, NewT).
range(X,X,[X]).
range(X,Y,R):- X<Y, X1 is X+1,range(X1,Y,R1),R =[X|R1].
inverting([X],[X]).
inverting([H|T],R):-inverting(T,R1),append(R1,[H],R).
duplicate([X],[[X|[X]]]).
duplicate([H|T],R):- duplicate([H],R1),T\=[],duplicate(T,R2), append(R1,R2,R).
rotLeftOnce([H|T], Result) :- append(T, [H], Result).
rotLeft(List, 0, List):-!.
rotLeft(List, N, Result) :- N>0, Nnew is N-1, rotLeftOnce(List,R),rotLeft(R, Nnew, Result).
rotRightOnce(List, Result) :- last(List, H),reverse(List, [_|T]), reverse(T, Partial),
append([H], Partial, Result).
rotRight(List, 0, List) :-!.
rotRight(List, N, Result) :- N>0, Nnew is N-1, rotRightOnce(List, R), rotRight(R, Nnew, Result).
flatArray([],[]).
flatArray([Head|Tail],R) :- flatArray(Head,New_Head),
flatArray(Tail,New_Tail),
append(New_Head,New_Tail,R).
flatArray([Head|Tail1], [Head|Tail2]) :- Head \= [],Head \= [_|_],flatArray(Tail1,Tail2).
/*
range(E, E, [E]) :-!.
range(L, R, [L|T]) :- L<R, Lnew is L+1,range(Lnew, R, T).
%range(E, E, Result) :- insertElement(E, [], Result).
% range(L, R, Result) :- L<R, insertElement(L,Result, ResultNew), Lnew is L+1, Result is ResultNew,
% range(Lnew, R, Result).
count([],0).
count([_|Tail], N) :- count(Tail, N1), N is N1 + 1.
*/