MathGroup Archive 2005

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

Search the Archive

Re: A ToExpression question

  • To: mathgroup at
  • Subject: [mg58341] Re: A ToExpression question
  • From: dh <dh at>
  • Date: Tue, 28 Jun 2005 21:56:40 -0400 (EDT)
  • References: <d9r4h4$53i$>
  • Sender: owner-wri-mathgroup at

Hi Ray,
A function does replace its dummy arguments by the actual arguments 
before it evaluates the body. Values insides strings are not replaced. 
Therefore, f2 prints x because it has not been replaced. f3 prints y 
because Module renames y by y$nnn and gives it the value x, but the 
replacement is not done inside the string. Here we still have y that has 
no value and prints as "y". On the contrary, Block does not rename local 
variables, it keeps the name, but temporaraily gives it the value of x. 
Therefore, Print[y] prints 0 because y has temporarily the value 0.
sincerely, Daniel

Ray Koopman wrote:
> f1[x_] := Print[x];
> f2[x_] := ToExpression["Print[x]"];
> f3[x_] := Module[{y = x}, ToExpression["Print[y]"]];
> f4[x_] :=  Block[{y = x}, ToExpression["Print[y]"]];
> Scan[#[0]&,{f1,f2,f3,f4}]
> 0
> x
> y
> 0
> Why don't f2 and f3 print 0 ?

  • Prev by Date: Re: exact integer from Log[ ]
  • Next by Date: Re: ListInterpolation
  • Previous by thread: Re: A ToExpression question
  • Next by thread: False image plot