Possível resolução

 % a)
inverte_tudo([],[]).
         inverte_tudo([[X|R]|L],I) :-
           inverte_tudo([X|R],XRI),
           inverte_tudo(L,LI),
           concatena(LI,[XRI],I).
         inverte_tudo([X|L],I) :-
           inverte_tudo(L,LI),
           concatena(LI,[X],I).
 % d)
merge([],L,L).
         merge(L,[],L).
         merge([X1|R1],[X2|R2],[X1|R]) :-
           antes(X1,X2),
           merge(R1,[X2|R2],R).
         merge(L,[X2|R2],[X2|R]) :-
           merge(L,R2,R).



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