Strictness making it worst?

Jorge Adriano jadrian@mat.uc.pt
Thu, 29 Nov 2001 20:25:31 +0000


> Then I tried:
> > sfibac                     :: IntPos -> (IntPos,IntPos) ->
> > (IntPos,IntPos) sfibac n (a,b)
> >
> >                | n == 0    = (a,b)
> >                | otherwise = sfibac (n-1)   (b, (+b) $! a)


I'm sorry I meant:
> sfibac                     :: IntPos -> (IntPos,IntPos) ->
> (IntPos,IntPos) sfibac n (a,b)
>
>                | n == 0    = (a,b)
>                | otherwise = sfibac (n-1)   (b, (a+) $! b)


otherwise the reductions would be wrong
> fibac:
> sfibac 4 (a, b) ->
> sfibac 3 (b, a+b) ->
> sfibac 2 (c, b+c) ->
> sfibac 1 (d, c+d) ->
> sfibac 0 (e, d+e)

In fact I would expect that using ((a+) $! b) would be better than (b, (+b) 
$! a), but the 1st seemed to be the worst in terms of both speed and stack 
space problems.

J.A.