<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 2, 2014 at 12:32 PM, t x <span dir="ltr"><<a href="mailto:txrev319@gmail.com" target="_blank">txrev319@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":rz" class="a3s" style="overflow:hidden">Hi,<br>
<br>
  I'm from a clojure background, where many things are lazy by<br>
default, including fundamental constructs, like map.<br>
<br>
  (def x (map func lst))<br>
  ;; func is not called on lst yet<br>
<br></div></blockquote><div><br></div><div>In erlang, this would be:</div><div><br></div><div>x() -></div><div>    [Func(L) || L <- list()].</div><div><br></div><div>The evaluation will happen when x/0 is invoked, but in Erlang the evaluation order is strict by default and nothing is evaluated "on demand" unless you explicitly ask for an iterator-like construct. Clojure also uses a strict evaluation order, but many data structures are consumed by iteration in Clojure and this means you have a way to terminate a computation in the middle of a map by not demanding the full sequence.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":rz" class="a3s" style="overflow:hidden">
  some-expression,<br>
  [ func(X) || X <- Lst],<br>
  some-other-expression<br>
<br>
  Is this assumption correct?<br></div></blockquote><div><br></div><div>In the above, you essentially have three Expressions</div><div><br></div><div>E1,</div><div>E2,</div><div>E3.</div><div><br></div><div>The rule in Erlang is that they are evaluated in order, i.e., E1 before E2 before E3. And they are always evaluated for their eventual effect, even if you don't bind the result. </div>

</div><br><br clear="all"><div><br></div>-- <br>J.
</div></div>