Re: Very very basic question about Mathematica expressions
- To: mathgroup at smc.vnet.net
- Subject: [mg111193] Re: Very very basic question about Mathematica expressions
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 23 Jul 2010 07:11:38 -0400 (EDT)
On 7/22/10 at 5:44 AM, sam.takoy at yahoo.com (Sam Takoy) wrote: >May I belabor this point a little. I understand how to make >Manipulate work and I understand functions. (I am a product of >Scheme from with Mathematica seems to have borrowed a few ideas.) >My question is much more formal: What are the building blocks of >Mathematica, the formal language. When you say >s = x+h >what is s? >Is it an "expression"? No, s is a symbol which evaluates to x+h as a result of the assignment operation. >Does s represent x+h wherever it appears (assuming x and h are >unassigned at the time of s=x+h)? Apparently not always: yes in >s/.h->5, but not in Manipulate. >So here, then is my "model" of Mathematica: In s = x+h, s is an >"Expression" In s[x_, h_]:=x+h, s is a "Function" With s=x+h, x+h is evaluated and becomes one of the OwnValues of s. With s[x_, h_]:= x+h, x+h is not evaluated and the expression x+h becomes one of the DownValues for s. That is: In[5]:= s = x + h; {OwnValues[s], DownValues[s]} Out[6]= {{HoldPattern[s] :> h + x}, {}} In[7]:= Clear[s]; s[x_, h_] := x + h {OwnValues[s], DownValues[s]} Out[9]= {{}, {HoldPattern[s[x_, h_]] :> h + x}} >Manipulate expects a "Function" so that answers my question. No, the following works just fine. Manipulate[Plot[x (1 + a x), {x, 0, 6}], {a, 0, 2}] Here, the argument x (1 + a x) is simply an expression, clearly not a function with named arguments. >Then what is >s[h_] := x + h? Is it an "Expression" or a "Function" of h with a >parameter x? Actually, I would call this an example of bad programming style. The result depends on h which is local to s and x which is a global parameter. The dependence on a global parameter often leads to unexpected results and difficult debugging. >Would then Manipulate[Plot[s[h], {x, 0, 1}, PlotRange -> {0, 1}], >{h, 0, 1}] work? (The answer is yes.) So apparently, Plot is happy >with an "Expression", but Manipulate wants a "Function"? Why? Manipulate isn't restricted to functions. >Also, in Manipulate[Plot[x+h, {x, 0, 1}, PlotRange -> {0, 1}], {h, >0, 1}], x+h is no longer an "Expression", but is once again a >"Function", because of the context? Even though it's inside Plot >which is happy with an "Expression"? No, x+h doesn't become a function simply by making it an argument to Plot. >A personal note: I guess I'm a little frustrated that after a few >months of working with Mathematica, I still have to try things >before I know whether they'll work or not. I'm used to having a >clear picture of the grammar of the language that I'm working with, >but I'm struggling here. I don't have much to say here. I've been using Mathematica since version 1.2 and still find I need to try some things out before I know whether they will work as I want. This is particularly true of newer features like Manipulate that I don't use frequently.