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