Laborator 6

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.

*/