% a) comprimento_par([]). comprimento_impar([_]). comprimento_par([_|L]) :- comprimento_impar(L). comprimento_impar([_|L]) :- comprimento_par(L). % b) capicua([]). capicua([_]). capicua([X|L1]) :- inverte(L1,[X|L2]), capicua(L2). % b) capicua(L) :- inverte(L,L). % c) shift([],[]). shift([X|L],S) :- concatena(L,[X],S). % d) significa(0,zero). significa(1,um). significa(2,dois). significa(3,tres). significa(4,quatro). significa(5,cinco). significa(6,seis). significa(7,sete). significa(8,oito). significa(9,nove). significa(X,X). traduz([],[]). traduz([X|L],[Y|T]) :- significa(X,Y), traduz(L,T). % e) del(X,[X|T],T). del(X,[Y|T],[Y|R]) :- del(X,T,R). subconjunto(L,L). subconjunto(L,S) :- del(X,L,L1), subconjunto(L1,S). % f) comp([],0). comp([X|L],N) :- comp(L,N1), N is N1 + 1. permutacao([],[]). permutacao(L,[X|P]) :- del(X,L,L1), permutacao(L1,P). divide_lista(L,L1,L2) :- permutacao(L,P), concatena(L1,L2,P), comp(L,N), comp(L1,N1), comp(L2,N2), (N2 is N // 2 ; N1 is N // 2). % g) nivela([],[]). nivela([[]|L],N) :- nivela(L,N), !. nivela([[X|Y]|L],N) :- nivela([X|Y],N1), nivela(L,N2), concatena(N1,N2,N) ,!. nivela([X|L],[X|N]) :- nivela(L,N). % h) members2(X,Y,[X|L]) :- member(Y,L). members2(X,Y,[_|L]) :- members2(X,Y,L).