[Haskell-cafe] Strange memory consumption problems in something that should be tail-recursive

Creighton Hogg wchogg at gmail.com
Tue Feb 13 16:12:32 EST 2007


On 2/13/07, Duncan Coutts <duncan.coutts at worc.ox.ac.uk> wrote:
>
> On Tue, 2007-02-13 at 15:27 -0500, Jefferson Heard wrote:
> > Hi, I am running the following code against a 210 MB file in an attempt
> to
> > determine whether I should use alex or whether, since my needs are very
> > performance oriented, I should write a lexer of my own.  I thought that
> > everything I'd written here was tail-recursive
>
> Isn't that exactly the problem - that it's tail recursive? You do not
> want it to be tail recursive since then it must consume the whole input
> before producing any output. You want it to be as lazy as possible so
> that it can start producing tokens as soon as possible without having to
> consume everything.


This may be silly of me, but I feel like this is an important point:  so
you're saying that tail recursion, without strictness, doesn't run in
constant space?

So for example in the case of,
facTail 1 n' = n'
facTail n n' = facTail (n-1) (n*n')
You'll just be building a bunch of unevaluated thunks until you hit the
termination condition?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070213/12543776/attachment.htm


More information about the Haskell-Cafe mailing list