Re: Variables within With statement
- To: mathgroup at smc.vnet.net
- Subject: [mg123749] Re: Variables within With statement
- From: "Alexander Elkins" <alexander_elkins at hotmail.com>
- Date: Sat, 17 Dec 2011 02:45:50 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jccg39$mb4$1@smc.vnet.net>
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, Reverse@Thread@Unevaluated@Unevaluated@l] /; If[Head@Unevaluated@l === List, True, 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 at nyu.edu> wrote in message news:jccg39$mb4$1 at 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 >