[Haskell-cafe] Newbie question: Where is StackOverflow on the Wiki?

Lanny Ripple lanny at cisco.com
Mon Aug 20 12:21:01 EDT 2007


Not really more efficient but plays to the language 
implementation's strengths.

Imagine

   take 10 $ foo (10^9)

and

   take 10 $ bar (10^9)

bar wouldn't evaluate until the 10^9 was done.  (And I just 
ground my laptop to a halt checking that.  :)  foo on the other 
hand would run out to 10^6 and then conveniently finish the rest 
of your program waiting for the need of the other 10^9-10 values. 
  If you *always* needed the result of the 10^9 calculations then 
tail-recursion should be better since you won't be holding onto 
the evaluation frames.

   -ljr

Peter Verswyvelen wrote:
> 
> Now if I understand this correctly, this just means that when writing
> something like:
> 	
> foo n = if n<0 then [] else n : foo (n-1)
> 
> bar n = aux 0 [] where
>   aux i xs = if i>n then xs else aux (i+1) (i:xs)
> 
> that foo is more efficient than bar because lazy evaluation of foo just puts
> the delayed computation in the "cdr" of the list, while lazy evaluation of
> bar has to keep track of all aux calls (the "closures") which gives much
> more overhead, maybe even stack overflow? Something like that? 
> 
> Thanks,
> Peter
> 


-- 
Lanny Ripple <lanny at cisco.com>
ScmDB / Cisco Systems, Inc.


More information about the Haskell-Cafe mailing list