flatten_dl(Xs, Zs) :- flatten_dl_aux(Xs, Zs - []).

flatten_dl_aux(X, [X|Z] - Z) :- \+ is_list(X).
flatten_dl_aux([], X - X).
flatten_dl_aux([X|Xs], Y - Z) :-
  flatten_dl_aux(X, Y - T),
  flatten_dl_aux(Xs, T - Z).
