[plt-scheme] Behavior of foldl

From: Robby Findler (robby at cs.uchicago.edu)
Date: Mon Jul 10 11:14:47 EDT 2006

It is non-standard, but not in the way you are imagining. The order of
the arguments to `f' (the first parameter to foldl) are reversed from
what you expect (and from what Haskell does). I did that because
`foldl' accepts an arbitrary number of list arguments (and thus `f' a
matching number of arguments) and I thought it would be easier to use
in that case if the accumulator came at the end, but I'm having trouble
remembering exactly why now .. it was quite a while ago.

Robby

At Sun, 9 Jul 2006 19:48:55 +0200, Jean-Paul ROY wrote:
> It seems that the behavior of foldl is non standard with respect to  
> most functional programming languages.
> Il should be the iterative version of foldr, working from left to  
> right :
> 
>   (define (foldl f e L)
>      (define (iter acc L)
>        (if (null? L)
>            acc
>            (iter (f acc (car L)) (cdr L))))
>      (iter e L))
> 
>  > (foldl (lambda (x y) (+ (* 2 x) y)) 4 '(1 2 3))
> 43
> 
> But the fold defined in list.ss has not this behavior and returns 16.
> 
> See example 5 in http://www.zvon.org/other/haskell/Outputprelude/ 
> foldl_f.html
> 
> Am i wrong ?
> 
>      Jean-Paul Roy
> 
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme


Posted on the users mailing list.