[Haskell-cafe] Haskell and "memoization"
nowgate at yahoo.com
Wed Dec 16 00:58:38 EST 2009
I think this (#3 below) is where I got the idea:
Lazy evaluation refers to how expressions are evaluated when they are passed as arguments to functions and entails the following three points:
1. The expression is only evaluated if the result is required by the calling function, called delayed evaluation.
2. The expression is only evaluated to the extent that is required by the calling function, called Short-circuit evaluation.
3. the expression is never evaluated more than once, called applicative-order evaluation.
So, I guess #3 doesn't apply to Haskell, or maybe I just misunderstood the meaning of the statement. I assumed that if f(p) = q (by some calculation) then that calculation would be replaced by q so the next time the function was called it could just return q, as occurs in memoization.
--- On Tue, 12/15/09, Gregory Crosswhite <gcross at phys.washington.edu> wrote:
From: Gregory Crosswhite <gcross at phys.washington.edu>
Subject: Re: [Haskell-cafe] Haskell and "memoization"
To: "Daniel Fischer" <daniel.is.fischer at web.de>
Cc: haskell-cafe at haskell.org
Date: Tuesday, December 15, 2009, 11:47 PM
Hmm, you raise an
On Dec 15, 2009, at 8:28 PM, Daniel Fischer wrote:
> Am Mittwoch 16 Dezember 2009 05:08:39 schrieb Gregory Crosswhite:
> Not even then, necessarily. And it's not always a good idea.
> f k = [1 .. 20^k]
You raise a really good point here. One can force sharing, as I understand it, by using a let clause:
let xs = f 20
in length (xs ++ xs)
If I understand correctly, this should cause xs to be first evaluated, and then cached until the full length is computed, which in this case is obviously undesirable behavior.
Haskell-Cafe mailing list
Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe