Task

Write a function to flatten the nesting in an arbitrary list of values.

Your program should work on the equivalent of this list:

  [[1], 2, [[3, 4], 5], [[[]]], [[[6]]], 7, 8, []]

Where the correct result would be the list:

   [1, 2, 3, 4, 5, 6, 7, 8]

Related task

   Tree traversal


flatten(List, Flatted) :-
    flatten(List, [], Flatted).
 
flatten(Var, Tail, [Var| Tail]) :-
    var(Var),
    !.
flatten([], Flatted, Flatted) :-
    !.
flatten([Head| Tail], List, Flatted) :-
    !,
    flatten(Tail, List, Aux),
    flatten(Head, Aux, Flatted).
flatten(Head, Tail, [Head| Tail]).