Re: Indexed Slot in a Rule - How to do it??
- To: mathgroup at smc.vnet.net
- Subject: [mg100404] Re: Indexed Slot in a Rule - How to do it??
- From: Alexei Boulbitch <Alexei.Boulbitch at iee.lu>
- Date: Tue, 2 Jun 2009 06:49:16 -0400 (EDT)
Here's the problem. Convert a vector (list) with symbol names into indexed slots. I'm doing this so that I can turn the vector into function that takes a list. Here's an example of the desired behavior: eqs = {0, 5*x1, 1, 10*x3, 3*x2}; convert this to: indexedeqs = {0, 5*#[[1]], 1, 10*#[[3]], 3*#[[2]]}; T[q_]:=indexedeqs; T[{1,2,3}] = {0,5,1,30,6} I can't for the life of me figure out how to do this. I've been performing meta-Mathematica all week. Here's the closest I've come: xvars={x1,x2,x3}; MapIndexed[Rule[#1, #[[First@#2]]] &, xvars] But, this treats the second # literally, and puts in the current item from xvars. I need a way for the second # to just be # without it really taking a value. So, I tried doing it as a string: xvars={x1,x2,x3}; MapIndexed[Rule[#1, "#[[" <> ToString[First@#2] <> "]]"] &, xvars] And this creates a rule that looks correct, but, its right hand side of the rule is a string instead of an expression. I can't figure this out!!! Any help is greatly appreciated. All the best, Alan Hi, Alan, try one of these two ways: In[10]:= T1[q_List] := {0, 5*q[[1]], 1, 10*q[[3]], 3*q[[2]]}; T1[{1, 2, 3}] Out[4]= {0, 5, 1, 30, 6} In[7]:= T2 := {0, 5*#[[1]], 1, 10*#[[3]], 3*#[[2]]} &; In[9]:= T2[{1, 2, 3}] Out[9]= {0, 5, 1, 30, 6} Best, Alexei -- Alexei Boulbitch, Dr., habil. Senior Scientist IEE S.A. ZAE Weiergewan 11, rue Edmond Reuter L-5326 Contern Luxembourg Phone: +352 2454 2566 Fax: +352 2454 3566 Website: www.iee.lu This e-mail may contain trade secrets or privileged, undisclosed or otherwise confidential information. If you are not the intended recipient and have received this e-mail in error, you are hereby notified that any review, copying or distribution of it is strictly prohibited. Please inform us immediately and destroy the original transmittal from your system. Thank you for your co-operation.