Re: Stop on message?
- To: mathgroup at smc.vnet.net
- Subject: [mg126673] Re: Stop on message?
- From: Christoph Lhotka <christoph.lhotka at fundp.ac.be>
- Date: Wed, 30 May 2012 04:11:05 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201205260911.FAA07083@smc.vnet.net> <jpspa5$hb9$1@smc.vnet.net> <201205290947.FAA06698@smc.vnet.net> <4FC4F454.3010700@fundp.ac.be> <CAJDnrnpo2F-emO=0zv9bcT=Tyu86vEnwJkkjx8PvVq=pFjsO4w@mail.gmail.com>
Hello,
thank you for your detailed answer. The two examples
you mention are in good agreement with my argumentation:
A message marks an error or a warning and should
be taken as a motivation to change the code until
those messages disappear:
Example 1:
Solve[-26.81 == 194 k + k*l*32.9 && 22.2 == -74 k + k*l*59.7, {k, l}]
The "error" is that one uses a function which is designed to
return an exact solution for an inexact equation. The solution to
the "message problem" is not (!) to wrap Quiet[] around the code
but to use the right function for the right purpose, which in that
case is NSolve:
NSolve[-26.81 == 194 k + k*l*32.9 && 22.2 == -74 k + k*l*59.7, {k, l}]
No message is generated any more.
Example 2:
FindMinimum[x^2/2 + Cos[x], {x, 1}]
The essential part of the message, which is returned is the sentence:
"...The line search decreased the step size to within the tolerance
specified by AccuracyGoal and PrecisionGoal but was unable to find a
sufficient decrease in the function...."
Which just tells us that the function FindMinimum was unable to do the job,
so the result is questionable. Fortunately, Mathematica gives you a hint how
to deal with the issue:
FindMinimum[x^2/2 + Cos[x], {x, 1}, WorkingPrecision -> 24]
Again, no warning message is produced.
I think, that in my over 10 years of Mathematica experience I always took
the right choice to 1) be sure that any function I used or developed does
not produce a warning message before 2) I use them to implement another
function on their basis.
I also agree that the discussion maybe unessential for the interactive user.
Best,
Christoph
On 05/29/2012 06:22 PM, Szabolcs Horvát wrote:
> Hi Christoph,
>
> Mathematica is used interactive most of the time. It's very different
> from most other programming languages in this respect. In C, or even
> in Python (which has an interactive shell), most of the time people 1.
> first write the program and debug it 2. then they package it up and
> give it to the user to run. In Mathematica we typically don't write
> stand-alone programs. The system is usually used interactive, and the
> most "packaged up" things are functions meant to be used by end-users.
> In other words: even the user is a programmer.
>
> When you make a standalone program like a text editor, your users
> shouldn't see any internal warnings/errors (on Linux these messages
> are often printed to the console on they're pretty uninformative to
> me, as a user, 95% of the time). When you make a function for another
> programmer to use, there are many reasons to keep those
> errors/warning/informative messages.
>
> Messages are one of the way functions communicate with users. Here's
> one example:
>
> http://mathematica.stackexchange.com/questions/6055/how-to-get-rid-of-warnings-when-using-solve-on-an-equation-with-inexact-coeffici/12
>
> The input Solve[-26.81 == 194 k + k*l*32.9&& 22.2 == -74 k + k*l*
> 59.7, {k, l}] issued a warning message, prompting the user to check
> the answer.
>
> Another example is FindMinimum[x^2/2 + Cos[x], {x, 1}] (from the
> docs), where an answer *is* returned, but there's also a warning that
> it might be incorrect. Version 5's General::spell messages are yet
> another example.
>
> There's no "writing" and "debugging" step here. This is the usual way
> to use the system. Solve and FindMinimum are high level functions
> which are probably more commonly typed than used as parts of other
> functions. These examples could occur in any usual interactive
> session of Mathematica.
>
> So, to sum up:
>
> Usually there's no "development phase" when you work with Mathematica.
> If there is, you're probably developing a "library" for users who are
> going to use it to "program" (actually just use the system
> interactively), and therefore they'll need messages again.
>
> I hope this clears it up.
>
> On 29 May 2012 18:07, Christoph Lhotka<christoph.lhotka at fundp.ac.be> wrote:
>> Hi,
>>
>> in my opinion messages in Mathematica are generated during the evaluation
>> process to give
>> some kind of "meta"-information about 1) what is going wrong or 2) what you
>> need to know
>> to check by yourself to know of the returned result is correct.
>>
>> I would like to compare this information with the concepts of "errors" and
>> "warnings" produced
>> by a compiler during the process to produce a program.
>>
>> Seeing "Mathematica messages" in this flavour any input which produces a
>> message should be
>> seen as wrong or not working properly and therefore be modified as long as
>> there are no
>> messages left at all.
>>
>> I therefore do not see a reason yet why I should use messages outside the
>> development
>> phase of a project.
>>
>> Can you provide me with one?
>>
>> Thanks,
>>
>> Christoph
>>
>>
>>
>>
>>
>> On 05/29/2012 11:47 AM, Szabolcs Horvát wrote:
>>> There were two replies suggesting to use Check[] to abort evaluation
>>> when a message is generated.
>>>
>>> Note that while Check does return a different result if a message was
>>> generated, it does not actually interrupt evaluation (it completed the
>>> evaluation of 'expr').
>>>
>>> See here for an example:
>>>
>>>
>>> http://mathematica.stackexchange.com/questions/5534/check-does-not-interrupt-evaluation-of-the-expression-when-a-message-is-emitted
>>>
>>> Please see here for a method that will reliably abort immediately when a
>>> message is generated.
>>>
>>>
>>> http://mathematica.stackexchange.com/questions/1512/how-to-abort-on-any-message-generated
>>>
>>> On 2012.05.27. 10:40, Sseziwa Mukasa wrote:
>>>> Check[expr,Return[]]
>>>>
>>>> On May 26, 2012, at 5:11 AM, Ralph Dratman<ralph.dratman at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Is there a simple way to get Mathematica to stop evaluating (like
>>>>> Interrupt) whenever a message is issued?
>>>>>
>>>>> I realize the debugger has that feature, but I would prefer not to use
>>>>> it in this case.
>>>>>
>>>>> Thank you.
>>>>>
>>>>> Ralph Dratman
>>>>>
- References:
- Stop on message?
- From: Ralph Dratman <ralph.dratman@gmail.com>
- Re: Stop on message?
- From: Szabolcs Horvát <szhorvat@gmail.com>
- Stop on message?