General
Material
Lecture 1
 Slides Practical Session
Lecture 2
 Slides Practical Session
Lecture 3
 Slides Practical Session
Lecture 4
 Slides Practical Session
Lecture 5
 Slides Practical Session

# Flattening lists

We 'flatten' a list by removing all the square brackets around any lists it contains as elements, and around any lists that its elements contain as elements, and so on for all nested lists. For example, when we flatten the list `[a,b,[c,d],[[1,2]],foo]` we get the list `[a,b,c,d,1,2,foo]` and when we flatten the list `[a,b,[[[[[[[c,d]]]]]]],[[1,2]],foo,[]]` we also get `[a,b,c,d,1,2,foo]`.

Write a predicate `my_flatten(+List,?Flat)` (you cannot use the name `flatten` because it is already defined in Prolog) that holds when the first argument `List` flattens to the second argument `Flat`. There are many ways of writing this predicate. For the moment, try to come up with one using `append` (the built-in version of `concatenate`). We will discuss a more elegant one which is not making use of append in the exercise about accumulators.