Re: Fuction definition

*To*: mathgroup at smc.vnet.net*Subject*: [mg73694] Re: Fuction definition*From*: Bill Rowe <readnewsciv at sbcglobal.net>*Date*: Sat, 24 Feb 2007 02:30:42 -0500 (EST)

On 2/23/07 at 4:42 AM, bar at ANTYSPAM.ap.krakow.pl wrote: >When I try : ------------------ p = 1; f1[x_] := p Sin[Pi x]; p = 2; >f2[x_] := p Sin[Pi x]; >f1[0.5] >f2[0.5] >Out[26]=2. >Out[27]=2. >----------------- When I use = instead of := it works OK. >Why ? The difference between "=" and ":=" is when evaluation occurs and the assignment is made. =46or "=" evaluation & assignment occurs immediately after you hit shift return =46or ":=" assignment occurs later when the function is being used. >It is safely to use "=" in function definition ? Yes, it is safe and in some cases better than ":=". For example, consider In[40]:= f[x_]=Integrate[y Sinh[y],{y,0,x}] Out[40]= x cosh(x)-sinh(x) In[41]:= Timing[Plot[f[x],{x,0,5}];] Out[41]= {0.013135 Second,Null} versus In[42]:= g[x_]:=Integrate[y Sinh[y],{y,0,x}] In[43]:= Timing[Plot[g[x],{x,0,5}];] Out[43]= {0.975745 Second,Null} In with ":=", the integral is being computed for each sample but was only computed once when "=" is used. Hence, Mathematica must do a lot more work with the second version. But this should not be taken as meaning "=" is better than ":=" since it can cause other problems. =46or example consider In[48]:= x=4; t[x_]=2 x Out[49]= 8 In[50]:= t[3] Out[50]= 8 Here x was assigned the value 4 and when the assignment to t was made 2 x was evaluated to 8 and assigned to t. And since _ matches any expression, t will always return 8 which is generally not what is desired. -- To reply via email subtract one hundred and four