Re: With[{software=Mathematica}, Frustration]
- To: mathgroup at smc.vnet.net
- Subject: [mg24370] Re: With[{software=Mathematica}, Frustration]
- From: "Drago Ganic" <drago.ganic at in2.hr>
- Date: Wed, 12 Jul 2000 23:13:11 -0400 (EDT)
- References: <8k3of0$428@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
well in my practical experience with Mathematica (a Year of hobby learning) the subject to this post you have choose is quite correct. The only suggestion I can give You is to buy a lot of books (I would like to know how many non-genious people have learned the deep basics of Mathematica only from the Mathematica book).
Doing so I can give you the answer:
In[6]:=Attributes[With]
Out[6]= {HoldAll, Protected}
In[8]:= Attributes[ReplaceAll]
Out[8]={Protected}
As you can see "With" does not evaluate c, therefore {a->2, b->3} acts on c, and not on a*b (like in "ReplaceAll").
If you want that "With" behaves the same as "ReplaceAll" you schould use "Evaluate" ....
In[10]:= With[{a = 2, b = 3}, Evaluate[c]]
Out[10]=6
or if you want that "ReplaceAll" behaves the same as "With" you schould use "Unevaluated"
In[5]:= Unevaluated[c] /. {a -> 2, b -> 3}
Out[5]= a b
as Stephen said in The Book (you have not quooted the * ... * part ):
*Except for the question of when x and body are evaluated*, With[ax = aa, body] works essentially like body /. x -> a.
So, read carefully.
Greeting from Croatia,
Drago Ganic
"AES" <siegman at stanford.edu> wrote in message news:8k3of0$428 at smc.vnet.net...
> Pages 359-360 of The Mathematica Book says (admittedly, taken a little
> out of context),
>
> "You can think of With as a generalization of the /. operator. . ."
>
> and
>
> " With[{x=x0}, body] works essentially like body /. x->x0 . . . "
>
> Great, looks neat, let's try it for evaluating expressions without
> permanently setting the variables in them:
>
> In[1]:= c = a b
>
> Out[1]= a b
>
> In[2]:= c
>
> Out[2]= a b
>
> In[10]:= c /. {a -> 2, b -> 3}
>
> Out[10]= 6
>
> In[3]:= With[{a = 2, b = 3}, c]
>
> Out[3]= a b
>
> *Not* what I was hoping for . . .
>