On Friday, 27 July 2012 at 22:38:46 UTC, Dmitry Olshansky wrote:
On 27-Jul-12 22:58, Stuart wrote:

Well, off the top of my head, you could use something like:

Public Iterator Function AllFiles(RootDirectory As String) As
IEnumerable(Of String)
      Dim Roots As New Queue(Of String) From {RootDirectory}
      While Roots.Any
         Dim Root = Roots.Pop
         Roots.AddRange(IO.Directory.GetDirectories(Root))
         For Each Filename in IO.Directory.GetFiles(Root)
            Yield Filename
         Next
      End While
   End Function


Then it's not in anyway better then ranges.

I assume you mean "any way" - "anyway" has a different meaning. And I don't know much about ranges, because there's very little documentation. But as I understand it, for ranges I'd need to write a whole new class. Here, I'm writing a SINGLE FUNCTION in standard imperative style.

You again maintain stack (or queue, whatever).

There is a difference between recursion (stack) and state variables. To claim that my function is recursive is sheer nonsense. Recursion is costlier than a local queue.

Reply via email to