% Swap the first with the third element from a list swap_1_3([],[]). swap_1_3([A],[A]):-!. swap_1_3([A,B],[A,B]):-!. swap_1_3([H1,H2,H3|T],[H3,H2,H1|T]). % ?-swap_1_3([3,4,a,d,5],X). % X=[a,4,3,d,5] % ?-swap_1_3([3,4],X). % X=[3,4] %%%% min from a list minlist([X],X):-!. minlist([H1,H2|T],R):-H1 < H2,!, minlist([H1|T],R). minlist([H1,H2|T],R):- H2 =< H1, minlist([H2|T],R). %[2,3,4,1] ? %[2, 4,1] ? %%%%%%%%%%%%%%%%%%% % L=[-1,-4,3,5,6,-10] % L1=[-1,-4,-10] % L2=[3,5] % L3=[6] split_list([],[],[],[]). split_list([H|T],[H|R],Odd,Even):-H<0,!,split_list(T,R,Odd,Even). split_list([H|T],R,[H|Odd],Even):- X is H mod 2, X=1,!, split_list(T,R,Odd,Even). split_list([H|T],R,Odd,[H|Even]):- split_list(T,R,Odd,Even). % ?-split_list([-10,-11,-23],L1,L2,L3). % ?-split_list([2,3,-1,-10,-11,23,5,4,-1],X,Y,Z). %%%%%%%%%%%%%% split_list with acc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %split_list2(List,Neg,Odd,Even):-split_listAcc(List,[],Neg,[],Odd,[],Even). split_list2(List,Neg,Odd,Even):-split_listAcc(List,[],Neg,[],Odd,[],Even). split_listAcc([],Acc1,Acc1,Acc2,Acc2,Acc3,Acc3). split_listAcc([H|T],Acc1,Neg,Acc2,Odd,Acc3,Even):-H<0,!, add_to_end(H,Acc1,NewAcc1), split_listAcc(T,NewAcc1,Neg,Acc2,Odd,Acc3,Even). split_listAcc([H|T],Acc1,Neg,Acc2,Odd,Acc3,Even):-H>=0, X is H mod 2, X=1, !, add_to_end(H,Acc2,NewAcc2), split_listAcc(T,Acc1,Neg,NewAcc2,Odd,Acc3,Even). split_listAcc([H|T],Acc1,Neg,Acc2,Odd,Acc3,Even):-add_to_end(H,Acc3,NewAcc3), split_listAcc(T,Acc1,Neg,Acc2,Odd,NewAcc3,Even). % ?-split_list2([-10,-11,-23],L1,L2,L3). % ?-split_list2([2,3,-1,-10,-11,23,5,4,-1],X,Y,Z). %%%%%%%%%%%%% count occurrences of an element in a list % without accumulators count_occ(_,[],0):-!. count_occ(El,[El|T],N):-!,count_occ(El,T,N1), N is N1+1. count_occ(El,[_|T],N):-count_occ(El,T,N). % ?-count_occ(2,[3,2,4,5,2,3,2,2,2],X). % ?-count_occ(2,[5,6,7,8],X). % with acc count_occ2(El,List,Res):-countacc(El,List,0,Res). countacc(_,[],Acc,Acc):-!. countacc(El,[El|T],Acc,Res):-NewAcc is Acc+1,!, countacc(El,T,NewAcc,Res). countacc(El,[_|T],Acc,Res):-countacc(El,T,Acc,Res). % ?-count_occ2(2,[3,2,4,5,2,3,2,2,2],X). % ?-count_occ2(2,[5,6,7,8],X).