MathGroup Archive 2007

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

Search the Archive

Re: How to change symbolic values to numbers

  • To: mathgroup at smc.vnet.net
  • Subject: [mg77069] Re: How to change symbolic values to numbers
  • From: Bill Rowe <readnewsciv at sbcglobal.net>
  • Date: Sat, 2 Jun 2007 04:21:43 -0400 (EDT)

On 6/1/07 at 2:40 AM, krzysztof.lisowski at wp.pl wrote:

>Hello for all. I have a problem with changeing symbolic to number
>values:

>f1[{x1_,x2_}]=Block[{}, L={x1, 1-x1};

This is a rather unusual construction to say the least. Why use
Block when there are no local variables declared?

>Print[L]; (*Print prints  {x1, 1-x1} but I want to get value {.5, .
>5)*)];

The problem you are having is due to using Set rather than
SetDelayed. With Set ("=") everything is evaluated when you hit
shift-return. In this case that means f1 is set to the list
supplied as its argument. L is set to {x1, 1-x}. The expression
L={x1, 1-x2} is simply not evaluated again later when you use
f1. To see this look at the following:

In[31]:= Clear[f1];
f1[{x1_, x2_}] = Block[{}, L = {x1, 1 - x1}];
f1[{1, 2}] // Trace

Out[33]= {f1({1,2}),{1,1-1},{{-1,-1},1-1,0},{1,0}}

Contrast this with:

In[34]:= Clear[f1];
f1[{x1_, x2_}] := Block[{}, L = {x1, 1 - x1}];
f1[{1, 2}] // Trace

Out[36]= {f1({1,2}),Block[{},L={1,1-1}],{{{{-1,-1},1-1,0},{1,0}},L={1=
,\
0},{1,0}},{1,0}}

Here, the expression L={x1, 1-x2} is evaluated and you get the
desired result.

Use Set when you want to immediately assign a value to a variable

In general, you want to use SetDelayed (":=") for functions not
Set ("=")
--
To reply via email subtract one hundred and four


  • Prev by Date: Using Part
  • Next by Date: pure function to generate a list of integrals
  • Previous by thread: Re: How to change symbolic values to numbers
  • Next by thread: Re: How to change symbolic values to numbers