MC600 - Segundo semestre de 2003 - LISTA 9 ------------------------------------------ Defina predicados em PROLOG que resolvam os seguintes problemas. 1. Retorne o último elemento de uma lista dada. ultimo([X],X):- !. ultimo([H|T],X):- ultimo(T,X). 2. Retorne o reverso de uma lista. reverso ([],[]). reverso ([H|T],X) :- reverso (T,X1), append (X1,[H],X). sem usar append: reverso (X,Y) :- revaux(X,[],Y). revaux ([],Y,Y). revaux ([H|T],Y,Z) :- revaux (T,[H|Y],Z). 3. Retorne a sublista contendo os n-1 primeiros elementos de uma lista dada de comprimento n. butlast([],[]). butlast([_],[]). butlast([H|T],[H|X]) :- butlast(T,X). 4. Verifique se uma lista é sublista da outra, isto é, pode ser obtida da outra pela remoção de elementos. is_sub([],_). is_sub([X|T1],[X|T2]) :- is_sub(T1,T2), !. is_sub(T,[X|T1]) :- is_sub(T,T1). 5. Verifique se uma lista consiste de um trecho consecutivo da outra. sublista(Sub, Lista) :- prefixo(Sub, Lista). sublista(Sub, [_|Lista]) :- sublista(Sub, Lista). prefixo([],_). prefixo([H|T], [H|P]) :- prefixo(T, P).