Yes, the lazy list implementation discussed there (and suggested by Jani Launonen in this very thread) seem to be the best way to do it. Much better than my way, given it would be subject to all kinds of weird behaviors when hanging, being called by two functions, etc.<br>
<br>No idea why I hadn't thought of returning other functions, that's clearly the right (safe) way.<br><br>I've read the old discussion, and nothing really struck me as to why lazy lists never were implemented (or even the lazy list comprehensions). Of course there were a few valid objections formulated, but it looks like the discussion was forgotten as it evolved on to other subjects.<br>
<br>Without replacing the lists module, a lazylists (or streams, to follow what was told back in 2000) module right next to it wouldn't do much harm. While you don't gain a flawless integration of both concepts in the language, the separate module leaves a standard way to do it if one ever comes to need it.<br>
<br>Was there any specific reason as to why it wasn't developed?<br><br><div class="gmail_quote">On Fri, Mar 20, 2009 at 3:56 AM, Ulf Wiger <span dir="ltr"><<a href="mailto:ulf.wiger@erlang-consulting.com">ulf.wiger@erlang-consulting.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">Frederic T-H wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
First time posting here, I've been reading this mailing lists for a few months now, programming Erlang for a few months too.<br>
<br>
Python and its most functionnal parts is what eventually brought me to Erlang. One feature that I loved in Python and instantly noticed was not available in Erlang was generators. Generators are basically normal functions, except they return an iterator, letting you fetch each result one by one, effectively letting you work with constant memory. An example of the way Python does it:<br>

<br>
   def gen(n):<br>
       i = 0<br>
       while i<n:<br>
           yield i<br>
           i+=1<br>
       return<br>
<br>
   x = gen(2)<br>
   x.next() # returns 0<br>
   x.next() # returns 1<br>
   x.next()  # throws an exception<br>
</blockquote>
<br></div>
This feels a bit reminiscent of lazy lists, which were<br>
discussed at some length on the erlang list quite<br>
recently (the year 2000, in fact):<br>
<br>
<a href="http://erlang.org/pipermail/erlang-questions/2000-October/001875.html" target="_blank">http://erlang.org/pipermail/erlang-questions/2000-October/001875.html</a><br>
<br>
BR,<br>
Ulf W<br><font color="#888888">
-- <br>
Ulf Wiger<br>
CTO, Erlang Training & Consulting Ltd<br>
<a href="http://www.erlang-consulting.com" target="_blank">http://www.erlang-consulting.com</a><br>
</font></blockquote></div><br>