[Haskell-beginners] Re: folds again -- myCycle
daniel.is.fischer at web.de
Wed Mar 18 07:45:38 EDT 2009
Am Mittwoch, 18. März 2009 12:19 schrieb Will Ness:
> Bas van Dijk <v.dijk.bas <at> gmail.com> writes:
> > On Sun, Mar 15, 2009 at 7:35 PM, Will Ness <will_n48 <at> yahoo.com>
> > > which is then just rewritable as:
> > >
> > > myCycle xs = ys where ys = foldr (:) ys xs
> > >
> > > or (arriving at the same result)
> > >
> > > myCycle xs = foldr (:) (myCycle xs) xs
> > Note that, because 'ys' only has to be calculated once, GHC makes the
> > most efficient code for the former one. In the latter 'myCycle xs' has
> > to be calculated each time 'xs' runs empty.
> Actually my point was, that
> " I find that "where" rewrites are easier to comprehend for me,
> more often than not. :) "
Of course a matter of personal preference, but I tend to prefer where clauses,
too, in general. However, my preferred layout is
I deeply loathe not having the where on a separate line :-/
> " myCycle xs = ys where ys = foldr (:) ys xs "
> which should be exactly as the one with the let.
myCycle1  = 
myCycle1 xs = let ys = foldr (:) ys xs in ys
myCycle2  = 
myCycle2 xs = ys
ys = foldr (:) ys xs
are compiled to exactly the same code. In GHC, I think the first thing that
happens to myCycle2 is that it's rewritten to myCycle1.
What matters if whether you give a name to the result to get it shared or not.
More information about the Beginners