MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to produce variable substitution list?

  • To: mathgroup at
  • Subject: [mg90929] Re: How to produce variable substitution list?
  • From: Stonewall Ballard <stoney.nospam at>
  • Date: Wed, 30 Jul 2008 03:52:02 -0400 (EDT)
  • References: <g6mat3$i19$> <g6mqbq$nu3$>

On 2008-07-29 06:11:06 -0400, Valeri Astanoff <astanoff at> said:

> On 29 juil, 07:47, Stoney Ballard <ston... at> 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.
>>  - Stoney
> Good day,
> This is a solution inspired from Roman Maeder's
> "Programming in Mathematica":
> In[1]:= SetAttributes[myRules,HoldAll];
> myRules[vars_List]:=
> With[{vv=Map[Hold,MapAt[Hold,Hold[vars],{1,0}],{2}][[1]]},
> List@@(# -> ReleaseHold[#]& /@ vv)
> ];
> In[2]:= var1=3; var2=5;
> myRules[{var1,var2}]
> Out[4]= {Hold[var1]->3,Hold[var2]->5}
> V.Astanoff

It's too bad the quoted-printable conversion made your code difficult
to read in the newsgroup. Once I realized that "With" ignored "Hold",
your solution worked fine. While investigating it, I came up with this
simplified form, which seems to produce the same result:

myRules[vars_List] := Thread[Rule[Map[Hold, Hold[vars], {2}][[1]], vars]]

Thanks for your help.

 - Stoney

  • Prev by Date: Re: Re: bug? f'[x]'
  • Next by Date: Re: Re: Text search within a documentation page?
  • Previous by thread: Re: How to produce variable substitution list?
  • Next by thread: Adding assumptions to SOLVE