Re: Indexed Slot in a Rule - How to do it??
- To: mathgroup at smc.vnet.net
- Subject: [mg100326] Re: Indexed Slot in a Rule - How to do it??
- From: Simon <simonjtyler at gmail.com>
- Date: Mon, 1 Jun 2009 07:07:17 -0400 (EDT)
- References: <gvtme0$gct$1@smc.vnet.net>
Hi again,
you got me a bit curious about this... so here's what I've got now:
First, a function to find all symbols of the form symb followed by
something. This could be streamlined and generalised a bit...
In[1]:= findSymbols[symb_String,expr_]:=findSymbols
[{symb,CharacterRange["0","9"]},expr]
In[2]:= findSymbols[{symb_String,exts:{__String}},expr_]:=Module[{x},
x=Union@Flatten@FixedPoint[Apply[List,#,\[Infinity]]&,expr];
x=SymbolName[#]&/@Select[Flatten[x],Head[#]===Symbol&];
Symbol/@Select[x,StringMatchQ[#,symb~~exts..]&]]
In[3]:= test={x1,x2,x2a+x33,E^x5,Sin[x1 x2+x3 x4]}
In[4]:= findSymbols["x",test]
findSymbols[{"x",{"2","a"}},test]
Out[4]= {x1,x2,x3,x33,x4,x5}
Out[5]= {x2,x2a}
Then a function that takes the expression, extracts the relevant
symbols and turns it into the type of function that you wanted
In[6]:= T[expr_]:=Apply[Function[Evaluate@findSymbols
["x",expr],Evaluate@expr],#]&
In[7]:= T[test]@{a,b,c,d,e,f}
Out[7]= {a,b,d+x2a,E^f,Sin[a b+c e]}
Simon