Re: mathematica newbie trouble

*To*: mathgroup at smc.vnet.net*Subject*: [mg99319] Re: [mg99276] mathematica newbie trouble*From*: "David Park" <djmpark at comcast.net>*Date*: Sat, 2 May 2009 06:02:29 -0400 (EDT)*References*: <33135270.1241172362785.JavaMail.root@n11>

It's the SetDelayed on the k definition that causes the problem. Mathematica does not know that s is a function of a, b and c. When k is evaluated with numerical values a, b and c will only be substitutes where they explicitly appear in the rhs expression of the k definition. When Set is used the s expression is evaluated first and is part of the rhs definition. But more basically, I think it is poor practice to write expressions such as s = something, and then use it in subsequent definitions. It is better to localize it to the k definition. After all, it goes with it. So I would use something like the following: k[a_, b_, c_] := With[{s = (a + b + c)/2}, Sqrt[s (s - a) (s - b) (s - c)]] David Park djmpark at comcast.net http://home.comcast.net/~djmpark/ From: Guapo [mailto:yangshuai at gmail.com] i wrote the following mathematica code: s := (a + b + c)/2; k[a_, b_, c_] := Sqrt[s (s - a) (s - b) (s - c)]; k[3, 4, 5] k[5, 9, 12] when run it, i can't get the write answer. but i change setDelayed(:=) to set(=), everything works ok s = (a + b + c)/2; k[a_, b_, c_] = Sqrt[s (s - a) (s - b) (s - c)]; k[3, 4, 5] k[5, 9, 12] i did a google search for the difference of set and setDelayed, however, i still can't understand it for the upper described problem, could anyone explain it? great thanks.