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.