Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Insulating data from code

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66544] Re: Insulating data from code
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Fri, 19 May 2006 03:40:23 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <e4ekai$9av$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On 5/18/06, Ray Koopman <koopman at sfu.ca> wrote:
 > Thanks, J-M, but there seems to be a problem:
 >
 > In[3]:= A = {a, b, c, d};
 >         B = {1, 2, {3, 4}};
 >
 > In[5]:= copyPartition[A,B]
 >        copyPartition2[A,B]
 >
 > Out[5]= {a,b,{c,d}}
 > Out[6]= {{},{},{a,b}}
 >
 > Regards,
 > Ray

Hi Ray,

That's right. I had not done enough testing before posting. Sorry about 
that.
The following version of the function seems to work well as long as
the first list is flat.

In[1]:=
copyPartition3[A_List, B_List] /;
   Length[A] >= Length[Flatten[B]] :=
  Module[{start, end, lst},
   lst = (If[AtomQ[#1], {#1}, #1] & ) /@ B;
    start = FoldList[Plus, 1, Length /@ lst];
    end = start - 1; start = Most[start];
    end = Rest[end];
    lst = ((A[[#1]] & ) /@ Range[First[#1],
         Last[#1]] & ) /@ Transpose[{start, end}];
    MapAt[#1[[1]] & , lst, Position[AtomQ /@ B, True]]]

In[2]:=
A = {a, b, c, d};
B = {1, 2, {3, 4}};

In[4]:=
copyPartition3[A, B]

Out[4]=
{a, b, {c, d}}

In[5]:=
copyPartition[A_List, B_List] /;
   Length[A] >= Length[Flatten[B]] :=
  Module[{i = 0}, Map[A[[++i]] & , B, {-1}]]

In[6]:=
copyPartition[A, B]

Out[6]=
{a, b, {c, d}}

In[7]:=
A = {a, b, c, d, {e, f}, g, h};
B = {1, {2}, {3, 4}, {5, {6, 7}}};

In[9]:=
copyPartition3[A, B]

Out[9]=
{a, {b}, {c, d}, {{e, f}, g}}

In[10]:=
copyPartition[A, B]

Out[10]=
{a, {b}, {c, d}, {{e, f}, {g, h}}}

Best regards,
Jean-Marc


  • Prev by Date: Re: Insulating data from code
  • Next by Date: derivative of cubic spline
  • Previous by thread: Re: Insulating data from code
  • Next by thread: Re: Insulating data from code