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


OrderedCollection extend [
  flatten [ |f|
    f := OrderedCollection new.
    self do: [ :i |
      i isNumber
        ifTrue: [ f add: i ]
        ifFalse: [ |t|
          t := (OrderedCollection withAll: i) flatten.
          f addAll: t
        ]
    ].
    ^ f
  ]
].
 
 
|list|
list := OrderedCollection 
          withAll: { {1} . 2 . { {3 . 4} . 5 } .
                     {{{}}} . {{{6}}} . 7 . 8 . {} }.
 
(list flatten) printNl.