efficiency question

Jorge Adriano jadrian@mat.uc.pt
Sat, 9 Feb 2002 00:34:07 +0000


On Friday 08 February 2002 23:52, Hal Daume III wrote:
> I've tried using a strict fold:
>
> foldl' f a []     = a
> foldl' f a (x:xs) = (foldl' f $! f a x) xs
>
> but that has no effect (or minimal effect).

That wouldn't work even if if laziness is the problem because that would only 
cause the elements of the list to be evaluated to head normal form, the 
elements of the pair would not be evaluated so you'd have a 'suspension of  
(minus and plus) operations'.

instead of 
> (\x (a,b) -> (x+a,x-b))
try 
> (\x (a,b) -> (((,) $! x-a)$! x-b) )

I just noticed that you were the one who sent me the DeepSeq module.
This is the kind of place where I want to use it.
Instead of $!, try $!!.


And Konst Sushenko wrote:
>>My guess is that it is due to the laziness of the addition/subtraction
>>in (,)

Seems to me like lazyness is not the right guess because both functions Hall 
first posted were lazy. So I think it's just the overhead of applying (,) 
besides (+) and (-) in each step. Do I make sense or am I missing something?

J.A.