Possíveis soluções


% 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).



(c) Delfim F. Marado Torres
1999-04-13