Re: "Accumulate" in Mathematica 6
- To: mathgroup at smc.vnet.net
- Subject: [mg82784] Re: "Accumulate" in Mathematica 6
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Wed, 31 Oct 2007 06:05:28 -0500 (EST)
- References: <fg72li$kkr$1@smc.vnet.net>
Oskar Itzinger wrote: > Very sadly, Mathematica 6 is not supported under Irix - so I can't play with > it practically - but I noticed in the online > > documentation that there is a new function "Accumulate[list]", defined to be > equivalent to "Rest[FoldList[Plus, 0, list]]", > > giving a list of the successive accumulated totals of the elements in > <list>. > > Funny. While it was considered obsolete and superseded by "FoldList" in > Mathematica 2, Mathematica 1 (!) already did > > have a function "Accumulate", defined as > > Accumulate[f, g[e1, e2, e3, ...]] <==> g[e1, f[e1, e2], f[f[e1, e2], e3], > ....] > > so that > > Accumulate[Plus, Range[5]] <==> {1, 3, 6, 10, 15} > > However, "Accumulate" in Mathematica 1 clearly was not restricted to "Plus" > but rather specifically intended for dealing > > with functions that take exactly two arguments - so, I believe that > "Accumulate" in Mathematica 6 is much less usable > > than the former in Mathematica 1. > > Maybe I'm missing something here - but what was the rationale behind > re-implementing "Accumulate" in such a restricted > > version now? The old Accumulate[], as you described it, does exactly the same thing as FoldList[] (but the syntax is slightly different). The new Accumulate[] is a specialization of FoldList[] with the function Plus. I can only guess, but I think that it was introduced because it can be faster than the general FoldList[]: In[6]:= Timing[Accumulate[Range[3000000]];] Out[6]= {0.812, Null} In[7]:= Timing[FoldList[Plus, 0, Range[3000000]];] Out[7]= {1.766, Null} The same question could be asked about the functions Total[] or Norm[]. They are mostly redundant too. -- Szabolcs