Re: Map and functional constructs to replace iterative statements

• To: mathgroup at smc.vnet.net
• Subject: [mg96863] Re: [mg96783] Map and functional constructs to replace iterative statements
• From: Sseziwa Mukasa <mukasa at jeol.com>
• Date: Thu, 26 Feb 2009 07:57:02 -0500 (EST)
• References: <200902250900.EAA15513@smc.vnet.net>

```On Feb 25, 2009, at 4:00 AM, Andreas wrote:

> I have begun to replace Table, Do, While, or For, but in my
> thinking with Map, Inner, Outer and other functional programming
>
> But, I'm stuck.  I need to figure out how to use Map (or some
> related approach) when a function needs both a current value and a
> previous value in a time series, such as a percentage change
> function (or perhaps more generally stated, when I need to refer to
> previous values in a series or even previous calculations).  But
> first a simple case:
>
> percentChange[currentValue_, previousValue_] := 100 *
> ( currentValue - previousValue) / previousValue
>
> I know how to apply this iteratively, but how can I do it with Map
> or some other functional construct?

One option is to use create the pairs of arguments, then apply the
function

percentChange[#,#2]&@@@Transpose[{Rest[timeSeries],Most[timeSeries]}]

Another option is to do it recursively:

computeChanges[{results_,{previous_,current_}}]:=Append
[results,percentChange[previous,current]]

computeChanges[{results_,{args__}}]:=computeChanges[{Append
[results,percentChange[{args}[[2]],{args}[[1]]]],Rest[{args}]}]

computeChanges[timeSeries_]:=computeChanges[{{},timeSeries}]/;VectorQ
[timeSeries]&&Length[timeSeries]>=2

I realize the recursive solution does not use functional programming
constructs but I've found that not having to worry about explicit
indices can result in less bugs.

Regards,

Sseziwa Mukasa

```

• Prev by Date: Re: Graphics export for high quality documents
• Next by Date: Re: Counting Categories
• Previous by thread: Map and functional constructs to replace iterative statements
• Next by thread: Re: Map and functional constructs to replace iterative