MathGroup Archive 2000

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

Search the Archive

Re: With[{software=Mathematica}, Frustration]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg24341] Re: With[{software=Mathematica}, Frustration]
  • From: "Atul Sharma" <atulksharma at yahoo.com>
  • Date: Sun, 9 Jul 2000 04:52:47 -0400 (EDT)
  • References: <8k3of0$428@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In the help browser (paste and evaluate NotebookOpen[$TopDirectory <>
"\\Documentation\\English\\MainBook\\2_06.nb"]), you will see the
description of Block vs. Module. 'With' behaves like Module in this regard:

" the variable x in a module such as Module[ {x} , body] is always set up to
refer to a unique symbol, different each time the module is used, and
distinct from the global symbol x. The x in a block such as Block[{x} ,
body] is, however, taken to be the global symbol x. What the block does is
to make the value of x local. The value x had when you entered the block is
always restored when you exit the block."

As a result, since c is defined globally outside your 'With' statement, it
is not the same as the c referred to within the statement. While you could
choose to define c locally, Block will give you the desired result.


c: = a b
Block[{a = 2, b = 3},  c]

6

In the event that a or b have previously been assigned different values, the
delayed set := will avoid the following problem

a = 10;
c = a b
Block[{a = 2, b = 3},  c]

10 b
30


a = 10;
c := a b
Block[{a = 2, b = 3},  c]

6

HTH  Atul

AES wrote in message <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  . . .
>



  • Prev by Date: Re: Divisors
  • Next by Date: Re: Detecting and handling error messages?
  • Previous by thread: Re: With[{software=Mathematica}, Frustration]
  • Next by thread: RE: With[{software=Mathematica}, Frustration]