

troca(Entrada, ElemTira, ElemNovo, ElemNovo) :- 
        Entrada = ElemTira, !.

troca(Entrada, _, _, Entrada).

repete(_, 0, []) :- !.
repete(Elem, N, [Elem|T]) :- N1 is N-1, repete(Elem, N1,T).

trocaTodos(ListaEntrada, ElemTira, ElemNovo, ListaSaida) :-
    length(ListaEntrada, N),
    repete(ElemTira, N, ListaTira),
    repete(ElemNovo, N, ListaNovos),
    maplist(troca, ListaEntrada, ListaTira, ListaNovos, ListaSaida).

