Re: How to produce variable substitution list?
- To: mathgroup at smc.vnet.net
- Subject: [mg90919] Re: How to produce variable substitution list?
- From: Valeri Astanoff <astanoff at gmail.com>
- Date: Tue, 29 Jul 2008 06:10:27 -0400 (EDT)
- References: <g6mat3$i19$1@smc.vnet.net>
On 29 juil, 07:47, Stoney Ballard <ston... at gmail.com> wrote:
> Is there a straight-forward way to write a function that takes a list
> of symbols that are bound in the calling environment and produce a
> list such as is produced by Solve, like {var1->val1, var2->val2,...}?
>
> Currently, I'm using an expression (not a function) like {Hold[var1]->var=
1, Hold[var2]->var2}, which produces the right result, but it
>
> looks bad to duplicate the symbols. I want something that looks clean,
> like bindings[var1, var2,...].
>
> I know this isn't lisp, and there's no binding environment as such,
> but it would expect this to be doable.
>
> TIA for any suggestions.
>
> =A0- Stoney
Good day,
This is a solution inspired from Roman Maeder's
"Programming in Mathematica":
In[1]:=3D SetAttributes[myRules,HoldAll];
myRules[vars_List]:=3D
With[{vv=3DMap[Hold,MapAt[Hold,Hold[vars],{1,0}],{2}][[1]]},
List@@(# -> ReleaseHold[#]& /@ vv)
];
In[2]:=3D var1=3D3; var2=3D5;
myRules[{var1,var2}]
Out[4]=3D {Hold[var1]->3,Hold[var2]->5}
V.Astanoff