[Haskell-beginners] foldl by foldr
Matt Andrew
mjsaand at gmail.com
Thu May 13 23:12:53 EDT 2010
Thanks Edward, that makes a lot more sense.
Matt Andrew
At Thu, 13 May 2010 22:40:39 -0400,
Edward Z. Yang wrote:
>
> Excerpts from Matt Andrew's message of Thu May 13 22:29:01 -0400 2010:
> > The offending code is:
> >
> > myFoldl :: (a -> b -> a) -> a -> [b] -> a
> > myFoldl f zero xs = foldr step id xs zero
> > where step x g a = g (f a x)
> >
> > The thing I am having trouble understanding is what the 'id' function is
> > doing in a function that expects 3 arguments and is given 4 (foldr).
>
> The trick between building foldl with foldr is the fact that, where other
> folds might be accumulating values like integers or lists, this foldr is
> accumulating *functions*. This parenthesized version is equivalent:
>
> myFoldl f zero xs = (foldr step id xs) zero
>
> Since foldr is returning a function. In this case, id seems like a natural
> base case, since it is an extremely simple function.
>
> Hint: Try specializing this over some f and zero you know well, like + and 0,
> and then manually drawing out the structure and seeing what happens.
>
> Cheers,
> Edward
More information about the Beginners
mailing list