Re: working with lists

• To: mathgroup at smc.vnet.net
• Subject: [mg113224] Re: working with lists
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Tue, 19 Oct 2010 05:56:41 -0400 (EDT)
• References: <201010180947.FAA00936@smc.vnet.net>

```This uses pattern matching and recursion so it won't be particularly fast, but it seems to me the easiest way to program this sort of thing:

f[ls_List] /; ! MemberQ[Mod[ls, 3], 0] := ls
f[ls_List] :=
ls /. {v___, u_ /; Mod[u, 3] == 0, w___} :>
Flatten[{{v, 2 u}, f[{w} - 1]}]

In[5]:= f[{1,2,3,5,7}]
Out[5]= {1,2,6,4,12}

In[4]:= f[{1, 2, 3, 5, 7, 11, 12, 13, 14}]

Out[4]= {1,2,6,4,12,18,18,18,18}

Andrzej Kozlowski

On 18 Oct 2010, at 11:47, Sam Takoy wrote:

> Hi,
>
> I'm not very good at working with lists. May I ask for someone to work
> out an example which has several elements of what I need to do.
>
> What's the best way to write a function f[list] that goes through each
> element of the lest, doubles each element divisible by three and reduces
> each of the following elements by 1. That is
>
>
> f[{ 1 2 3 5 7}] is { 1 2 6 4 12 }
>