[Haskell-cafe] Re: Memoization in Haskell?
Gregory Crosswhite
gcross at phys.washington.edu
Fri Jul 9 12:45:45 EDT 2010
That actually doesn't work as long as memo is an array, since then it
has fixed size; you have to also make memo an infinitely large data
(but lazy) structure so that it can hold results for arbitrary n. One
option for doing this of course is to make memo be an infinite list, but
a more space and time efficient option is to use a trie like in MemoTrie.
Cheers,
Greg
On 7/9/10 12:50 AM, Heinrich Apfelmus wrote:
> Gregory Crosswhite wrote:
>> You're correct in pointing out that f uses memoization inside of
>> itself to cache the intermediate values that it commutes, but those
>> values don't get shared between invocations of f; thus, if you call
>> f with the same value of n several times then the memo table might
>> get reconstructed redundantly. (However, there are other strategies
>> for memoization that are persistent across calls.)
>
> It should be
>
> f = \n -> memo ! n
> where
> memo = ..
>
> so that memo is shared across multiple calls like f 1 , f 2 etc.
>
> Regards,
> Heinrich Apfelmus
>
> --
> http://apfelmus.nfshost.com
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe
mailing list