Re: Re: Re: When is a List not a List?
- To: mathgroup at smc.vnet.net
- Subject: [mg90985] Re: [mg90968] Re: [mg90956] Re: [mg90947] When is a List not a List?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 2 Aug 2008 03:25:08 -0400 (EDT)
- References: <200807310656.CAA07700@smc.vnet.net> <200808010659.CAA25763@smc.vnet.net> <4D3584F1-F616-4156-BD7A-9BE63878A8B0@mimuw.edu.pl>
Of course it should have been something like
Plot[x /. Solve[x^3 - 3 x^2 + a == 0, x], {a, -3, 5}]
Andrzej Kozlowski
On 1 Aug 2008, at 14:35, Andrzej Kozlowski wrote:
> I am not sure about the "no argument part". First, it seems to me
> obvious that one should try to learn Mathematica before trying to
> use it, and reading the documentation is a pretty basic part of
> learning. Why should you then call something a "quirk" if it is both
> documented and even exemplified.
> However, there is more to that. In view of what you have been
> arguing, perhaps you could tell us if it "seems odd to you" that
> Plot does not use different colors in the example below. It does not
> seem odd to me at all, and I doubt that even beginners (AES
> excepting, of course) will find it "a quirk".
>
>
> Plot[x /. Solve[x^3 - 3 x + a x == 0, x], {a, -3, 3}]
>
> Andrzej Kozlowski
>
>
> On 1 Aug 2008, at 08:59, DrMajorBob wrote:
>
>> No argument here. That's the behavior, and we've seen it a thousand
>> times.
>> A "quirk" is only a quirk the first 100 times we see it, or
>> thereabouts.
>> (Pick a number.)
>>
>> Plot COULD assign colors after evaluation, OTOH... the fact that it
>> doesn't is a design choice/artifact, not a necessity preordained by
>> fate.
>>
>> That being so, users are entitled to find it odd at first glance.
>> (Or even
>> second... maybe third.)
>>
>> Bobby
>>
>> On Thu, 31 Jul 2008 13:56:56 -0500, Andrzej Kozlowski <akoz at mimuw.edu.pl
>> >
>> wrote:
>>
>>> When I wrote "Plot does not evaluate its arguments" I meant it in
>>> the
>>> usual (although inaccurate) sense that people frequently use in
>>> this
>>> context, namely: that the so called Evaluator does not pre-
>>> evaluate the
>>> arguments of Plot (if you do not like to thing of "the Evaluator",
>>> another way of saying this is that "Mathematica" does not evaluate
>>> the
>>> arguments before Plot is applied and leaves any evaluating to
>>> Plot.) Of
>>> course, you are right that Plot does evaluate its arguments in
>>> some way
>>> (this sort of behavior is also referred in the often used phrase:
>>> "Plot
>>> evaluates its arguments in a non-standard way"). The fact that this
>>> "non-standard" evaluation results in a plot of a function is
>>> actually
>>> new in version 6; in all previous versions all you will get is an
>>> error
>>> message about the values of the function being plotted not being
>>> numeric.
>>> Anyway, my point was that this has been a normal (non quirky)
>>> behavior
>>> of Mathematica since version 1 and has been discussed here a
>>> number of
>>> times. (It must be at least the fourth of fifth time in 10 years
>>> that I
>>> am addressing this issue on this forum). It is also fully documented
>>> (with examples) in the Mathematica online documentation, all past
>>> printed documentation and a vast number of books dealing with
>>> Mathematica.
>>>
>>> Andrzej Kozlowski
>>>
>>>
>>> On 31 Jul 2008, at 20:15, DrMajorBob wrote:
>>>
>>>> But Plot DOES evaluate its arguments, of course, and DOES
>>>> (eventually)
>>>> see that multiple functions are being plotted. (Else they
>>>> couldn't be
>>>> plotted.)
>>>>
>>>> It's just not happening before colors are assigned.
>>>>
>>>> Nonetheless, it's prudent to take note of what functions actually
>>>> do,
>>>> and get used to it. Calling everything in sight a quirk serves no
>>>> purpose.
>>>>
>>>> (Paraphrasing Andrzej, perhaps.)
>>>>
>>>> Bobby
>>>>
>>>> On Thu, 31 Jul 2008 05:04:10 -0500, Andrzej Kozlowski <akoz at mimuw.edu.pl
>>>>> wrote:
>>>>
>>>>> There is nothing at all quirky about this. Yes,
>>>>> FullForm[Table[g[x,
>>>>> n], {n, 1, 2}]] and FullForm[{g[x, 1], g[x, 2]}] are indeed
>>>>> identical,
>>>>> but that is because FullForm evaluates its argument. But Plot has
>>>>> attribute:
>>>>>
>>>>> In[2]:= Attributes[Plot]
>>>>> Out[2]= {HoldAll, Protected}
>>>>>
>>>>> so, unlike FullForm, it does not evaluate its argument. In your
>>>>> first
>>>>> example, Plot[{g[x, 1], g[x, 2]}, {x, 0, 1}, PlotStyle -> {Red,
>>>>> Blue}], the first argument of Plot has an explicit List bracket,
>>>>> so
>>>>> Plot can see that it supposed to treat the argument as two
>>>>> different
>>>>> functions, without evaluating the argument. But in the second
>>>>> case, it
>>>>> does not see an explicit bracket, so it treats the entire
>>>>> expression
>>>>> as the graph of a single function (in versions of Mathematica
>>>>> before 6
>>>>> you would not have got any plot at all in this case).
>>>>>
>>>>> If you use Evaluate in the second code you will get the same
>>>>> result as
>>>>> you get form the first:
>>>>>
>>>>> Plot[Evaluate[Table[g[x, n], {n, 1, 2}]], {x, 0, 1}, PlotStyle ->
>>>>> {Red, Blue}]
>>>>>
>>>>> Finally, since you have given ample proof that, in spite of many
>>>>> years
>>>>> of using Mathematica, you have not mastered its basics (this
>>>>> particular issue has been raised and answered a countless number
>>>>> of
>>>>> times on this forum), why do you keep assuming that the problems
>>>>> that
>>>>> you keep coming across are Mathematica's "quirks" rather than
>>>>> (as is
>>>>> much more likely) gaps in your won understanding? What do you
>>>>> think of
>>>>> first year undergraduate students who whenever they do not
>>>>> understand
>>>>> something in their introductory lectures claim that it is wrong,
>>>>> or
>>>>> blame their textbook or their lecture rather then themselves?
>>>>>
>>>>> Andrzej Kozlowski
>>>>>
>>>>>
>>>>>
>>>>> On 31 Jul 2008, at 08:56, AES wrote:
>>>>>
>>>>>> g[x_, n_] := x^n
>>>>>> FullForm[Table[g[x, n], {n, 1, 2}]]
>>>>>> FullForm[{g[x, 1], g[x, 2]}]
>>>>>> Plot[{g[x, 1], g[x, 2]}, {x, 0, 1}, PlotStyle -> {Red, Blue}]
>>>>>> Plot[Table[g[x, n], {n, 1, 2}], {x, 0, 1}, PlotStyle -> {Red,
>>>>>> Blue}]
>>>>>>
>>>>>> The FullForm[]s are identical. One Plot[] has red and blue
>>>>>> curves;
>>>>>> the
>>>>>> other has two blue curves.
>>>>>>
>>>>>> Quirky!
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --DrMajorBob at longhorns.com
>>>
>>>
>>
>>
>>
>> --
>> DrMajorBob at longhorns.com
>>
>
- References:
- Re: Re: When is a List not a List?
- From: DrMajorBob <drmajorbob@att.net>
- Re: Re: When is a List not a List?