using less stack
C.Reinke
C.Reinke@ukc.ac.uk
Wed, 20 Mar 2002 18:12:12 +0000
> > > cpsfold f a [] ú
> > > cpsfold f a (x:xs) ÿ x a (\y -> cpsfold f y xs)
> >
> > and f takes a continuation, Bob's my uncle, and I have a program that
> > runs quickly in constant space!
>
> Good. I'm curious to know from other readers whether
> continuations like this are the only way of solving it,
> though.
Actually, and quite apart from it being cumbersome to use, I've got
my doubts about whether this cpsfold really does the job (is that
just me missing some point?-).
Also, I'm curious to know why the usual strict variant of foldl
doesn't help in this case?
foldl' f a [] = a
foldl' f a (x:xs) = (foldl' f $! f a x) xs
or, with the recently suggested idiom for strictness, tracing and
other annotations:-)
annotation = undefined
strict a = seq a False
foldl' f a l | strict a = annotation
foldl' f a [] = a
foldl' f a (x:xs) = foldl' f (f a x) xs
Claus