# [Haskell-beginners] Can ghc compiler Optimize the several calls to Same function

edgar klerks edgar.klerks at gmail.com
Wed Nov 10 19:40:18 EST 2010

```Hi Nicholas,

If you use a where statement, GHC only has to compute the computation group
year once, because it can be shared.

year1 [y1,y2,y3,y4x] = y1
year2 [y1,y2,y3,y4x] = y2
year3 [y1,y2,y3,y4x] = y3
year4x [y1,y2,y3,y4x] = y4x
cow_group_sum year = sum (group year)

--look here--
group 1 = [1,0,0,0]
group (year+1) = [year4x gy, year1 gy,year2 gy,year4x gy + year3 gy]
where gy = group year

main = print (cow_group_sum 50)

This works a lot faster.

I don't understand why GHC doesn't pick this up.

Greets,

Edgar
On Mon, Nov 8, 2010 at 2:08 PM, nicholas.ulysses <nicholas.ulysses at gmail.com
> wrote:

> It's my code to do some recursive things, focus on function 'group'.
>
> ---- cow.hs
>  year1 [y1,y2,y3,y4x] = y1
>  year2 [y1,y2,y3,y4x] = y2
>  year3 [y1,y2,y3,y4x] = y3
>  year4x [y1,y2,y3,y4x] = y4x
>  cow_group_sum year = sum (group year)
>
>  --look here--
>  group 1 = [1,0,0,0]
>  group (year+1) = [(year4x (group year)), (year1 (group year)),
> (year2 (group year)), ((year4x (group year)) + (year3 (group year)))]
>
>
>  main = print (cow_group_sum 50)
> ---- end
>
> Every time 'group' was called, the (group year) function was called 4
> times . when call (group 30), it takes tens seconds to finish.
>
> I have tried 'ghc -O3', but it's still 'lazy' on this thing.
>
> Map-Reduce seems to be the answer to the question. But I want to make
> sure that ghc CAN or CANNOT do the Optimize for Dynamic Programming?
>
>
> ----------------
> xingbo wu
> _______________________________________________
> Beginners mailing list