Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Variables within With statement
Replies: 5   Last Post: Dec 22, 2011 4:01 AM

 Messages: [ Previous | Next ]
 Alexander Elkins Posts: 32 Registered: 4/13/09
Re: Variables within With statement
Posted: Dec 17, 2011 2:12 AM

Here is an implementation which nests each variable in its own separate With
statement using Fold:

NestedWith[l_,e_] :=Identity@@
Fold[Unevaluated@With[{#2},#1]&,Unevaluated@Unevaluated@e,
Message[With::lvlist, ToString@Unevaluated@l]; False]

SetAttributes[NestedWith,HoldAll]

NestedWith::usage=
StringReplace[Replace[With::usage,Messages[With]],"With"->"NestedWith"];

SyntaxInformation[NestedWith]={"ArgumentsPattern"->{{__},_}};
For example:

In[1]:=a=Exp[2];b=Exp[3];c=Exp[4];

In[2]:=NestedWith[{a=5,b=10a,cb},a+b+c]
Out[2]= 1055

Which matches:

In[3]:=With[{a=5},With[{b=10a},With[{cb},a+b+c]]]
Out[3]= 1055

Alexander

"Harvey P. Dale" <hpd1@nyu.edu> wrote in message
news:jccg39\$mb4\$1@smc.vnet.net...
> Is there any easy way to have one variable within a With
> statement take its value from a prior variable in the same With
> statement? For example, if I evaluate With[{a = 5, b = 10 a}, a + b], I
> get 5 + 10a, and what I want is 55. I can get there like this: With[{a
> = 5}, With[{b = 10 a}, a + b]] -- which does produce 55 -- but it would
> be nicer if I could use a single With statement and get b, within it, to
> take its value from a.
>
> Thanks.
>
> Harvey
>

Date Subject Author
12/15/11 Harvey P. Dale
12/16/11 Simon Tyler