Re: Insulating data from code
- To: mathgroup at smc.vnet.net
- Subject: [mg66575] Re: Insulating data from code
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Sat, 20 May 2006 04:47:58 -0400 (EDT)
- Organization: The University of Western Australia
- References: <e4ekai$9av$1@smc.vnet.net> <e4jtnn$d02$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <e4jtnn$d02$1 at smc.vnet.net>, Peter Pein <petsie at dordos.net> wrote: > Ray Koopman schrieb: > >>From time to time I've wanted to partition the first level of one > > list, say A, the same way that another list, say B, is partitioned. > > One way to do this is > > > > copyPartition[A_List, B_List] /; Length@A >= Length@Flatten@B := > > Module[{i = 0}, Map[A[[++i]]&,B,{-1}]] > > > > But all the methods I've thought of have a pointer that functions > > something like i in the above code. I'd like to eliminate the pointer, > > because in the unlikely event that A contains an unevaluated symbol > > that is the same as the name of the pointer with $ appended -- e.g., > > i$, if the pointer is i -- then in the returned list that symbol will > > have a numeric value assigned to it. Unique[i] doesn't help. The > > only solution I see is the probabilistic one of giving the pointer a > > strange (random?) name that hopefully would be very unlikely to show > > up as data. But that would be giving up. Does anyone have any ideas? > > > Hi Ray, > > use Replace[]: > > A={a,b,c,d,e}; > B={{1},{2,3},{{{4}},5}}; > > Ap=B/.Thread[Flatten[B]\[Rule]A] > --> {{a},{b,c},{{{d}},e}} No, that won't work. Try A={a,b,c,d,a}; B={{1},{2,1},{{{3}},2}}; Ap=B/.Thread[Flatten[B] -> A] You get {{a}, {b, a}, {{{d}}, b}} whereas I think the OP wanted {{a}, {b, c}, {{{d}}, a}} Cheers, Paul _______________________________________________________________________ Paul Abbott Phone: 61 8 6488 2734 School of Physics, M013 Fax: +61 8 6488 1014 The University of Western Australia (CRICOS Provider No 00126G) AUSTRALIA http://physics.uwa.edu.au/~paul