Oito Exercícios resolvidos sobre listas: Problema

a)
Define dois predicados, comprimento_par(Lista) e comprimento_impar(Lista), que são verdadeiros se o argumento Lista for respectivamente uma lista de comprimento par ou ímpar.
b)
Define o predicado capicua(Lista). Uma lista diz-se capicua se for indiferente ler a lista da esquerda para a direita ou da direita para a esquerda. Exemplos: [a,n,a], .
c)
Define o predicado shift(Lista1, Lista2) de tal modo que Lista2 é a Lista1 ``shiftada'' rotacionalmente de um elemento para a esquerda. Por exemplo:


d)
Define o predicado traduz(Lista1, Lista2) que traduz os números de 0 a 9 que possam aparecer na Lista1 pelas palavras correspondentes. Por exemplo:


e)
Define o predicado subconjunto(Cnj, Subcnj) onde Cnj e Subcnj são listas representando dois conjuntos. Pretendemos ser capazes de usar esta relação não só para verificar a relação subconjunto, mas também sermos capazes de gerar todos os possíveis subconjuntos de um dado conjunto. Por exemplo

         ?-subconjunto([a,b,c],S).

         S = [a,b,c] ;

         S = [b,c] ;

         S = [c] ;

         S = [ ] ;

         ...
f)
Define o predicado divide_lista(L, L1, L2) de tal modo que os elementos de L sejam particionados entre L1 e L2, e L1 e L2 tenham aproximadamente o mesmo comprimento. Por exemplo,


g)
Define o predicado nivela(Lista,ListaNivelada) onde Lista pode ser uma lista de listas e ListaNivelada é a Lista ``nivelada''. Por exemplo:


h)
Define o predicado members2(X,Y,L), que deve ser verdadeiro apenas quando X e Y são membros de L e X precede Y.

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