, .
atoms_to_vars(List,Output) :-
atoms_to_vars(List,_,Output).
atoms_to_vars([],_,[]).
atoms_to_vars([A1|List],Dict,[A2|Output]) :-
(atom(A1),member(A1:A2,Dict);
is_list(A1),atoms_to_vars(A1,Dict,A2);
A1=A2),
atoms_to_vars(List,Dict,Output).
SWI-Prolog:
?- atoms_to_vars(['a',1,['b','a']],Output).
Output = [_8828, 1, [_8858, _8828]]