del1(_, [], []).
del1(X, [X | Tail], Tail_1):- del1(X, Tail, Tail_1).
del1(X, [Y | Tail], [Y | Tail_1]):- del1(X, Tail, Tail_1).

del2(_, [], []).
del2(X, [Y | Tail], [Y | Tail_1]):- del2(X, Tail, Tail_1).
del2(X, [X | Tail], Tail_1):- del2(X, Tail, Tail_1).

%?- del1(1, [2,1],P).
%P = [2] ;
%P = [2, 1] ;
%No

%?- del2(1, [2,1],P).
%P = [2, 1] ;
%P = [2] ;
%No


rem_first(L, 0, L).
rem_first([_|T], N, T1):- N1 is N-1, rem_first(T, N1, T1).  


pairs([], _, []).
pairs([H|T], L2, R):- p_helper(H,L2,R1), pairs(T, L2, R2), append(R1, R2, R).

p_helper(_, [], []).
p_helper(E, [H|T], [[E,H]|T1]) :- p_helper(E,T,T1). 



% another version for pairs
pp([], _, []).
pp(_, [], []).
pp([H1|T1], [H2|T2],[[H1,H2]| R]):- pp([H1|T1],T2,R1), 
    pp(T1, [H2|T2], R2), append(R1, R2, R).

% another version for pairs
ppp(L1,L2,L):- 
  findall([X,Y],(member(X,L1), member(Y,L2)),L).


prog_1([],[]).
prog_1([X|T], [X,X|T1]):- prog_1(T, T1).


prog_2(L,R) :- acc(L, 1, R). 
acc([],A,A).
acc([H|T],A,R):- A1 is A*H, acc(T,A1,R).

%?- prog_2([1,2,3,4],R).
% N = 24


prog_3([], Y, [Y]).
prog_3([H|T], Y, [H |T1]):- prog_3(T, Y, T1).

% ?- prog_3([a,b,c], 5 , R).
% R = [a,b,c,5]
