The standard prelude in Haskell does not define anything
called "fold".  It defines fold{l,r}{,1} which can be
applied to any Foldable data (see Data.Foldable).  For
technical reasons having to do with Haskell's
non-strict evaluation, foldl' and foldr' also exist.
But NOT "fold".

https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Foldable.html#laws


On Thu, 13 Apr 2023 at 21:17, Sebastian Jordan Montano <
sebastian.jor...@inria.fr> wrote:

> Hello Steffen,
>
> Let's take Kotlin documentation (
> https://kotlinlang.org/docs/collection-aggregate.html#fold-and-reduce)
>
> > The difference between the two functions is that fold() takes an initial
> value and uses it as the accumulated value on the first step, whereas the
> first step of reduce() uses the first and the second elements as operation
> arguments on the first step.
>
> Naming is not so consistent in all the programming languages, they mix up
> the names "reduce" and "fold". For example in Haskell "fold" does not take
> an initial value, so it is like a "reduce" in Kotlin. In Kotlin, Java,
> Scala and other oo languages "reduce" does not take an initial value while
> "fold" does. Pharo align with those languages (except that out fold is
> called #inject:into:)
>
> So for me the Pharo methods #reduce: and #inject:into represent well what
> they are doing and they are well named.
>
> Cheers,
> Sebastian
>
> ----- Mail original -----
> > De: "Steffen Märcker" <merk...@web.de>
> > À: "Any question about pharo is welcome" <pharo-users@lists.pharo.org>
> > Envoyé: Mercredi 12 Avril 2023 19:03:01
> > Objet: [Pharo-users] Collection>>reduce naming
>
> > Hi!
> >
> > I wonder whether there was a specific reason to name this method
> #reduce:?
> > I would have expected #fold: as this is the more common term for what it
> > does. And in fact, even the comment reads "Fold the result of the
> receiver
> > into aBlock." Whereas #reduce: is the common term for what we call with
> > #inject:into: .
> >
> > I am asking not to annoy anyone but out of curiosity. It figured this out
> > only by some weird behaviour after porting some code that (re)defines
> > #reduce .
> >
> > Ciao!
> > Steffen
>

Reply via email to