Re: NMinimize problem: fct minimized uses FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg123653] Re: NMinimize problem: fct minimized uses FindRoot
- From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
- Date: Wed, 14 Dec 2011 06:02:39 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201112101227.HAA19219@smc.vnet.net>
On Tue, 13 Dec 2011 10:41:11 -0000, Andrzej Kozlowski <akoz at mimuw.edu.pl>
wrote:
>
> On 12 Dec 2011, at 12:43, Oleksandr Rasputinov wrote:
>
>> For example, the erroneous usage:
>>
>> Block[{a = 1, b = 2}, Return[a]; Return[b]]
>>
>> gives:
>>
>> Return[1]
>>
>> but a correct usage:
>>
>> Do[Block[{a = 1, b = 2}, Return[a]; Return[b]], {1}]
>>
>> gives (because of the enclosing Do):
>>
>> 1
>
> This is not quite the whole story. For example, while the above use of
> Return in Block does not work, this one (in a function call) does:
>
> f[] := Block[{a = 1, b = 2}, Return[a]; Return[b]]
>
> f[]
>
> 1
>
> Moreover, if you replace the Do loop in your example with a While loop,
> you will get:
>
> n = 1; While[n < 10, Block[{a = 1, b = 2}, Return[a]; Return[b]]]
>
> Return[1]
>
> All of this is purposeful design and can be explained and justified but
> I don't think it's worth the bother since Mathematica has far superior
> means of flow control than this clumsy and arcane construct.
>
> Andrzej
>
Thanks for the additional examples. Yes, there are limitations to what
Return (or Break, or Continue) will accept as a control flow construct; I
imagine most people would have suspected that Block does not count but it
is a little surprising to find that While doesn't either.
The documentation for Return also states that "Return[expr] exits control
structures within the definition of a function, and gives the value expr
for the whole function", by which it apparently means that delayed
definitions do count as enclosing control flow, although in apparent
contradiction to the documented behaviour Function does not. (This seems
to be another example of a virtually meaningless statement about functions
in the documentation made on the assumption that the reader is stuck in
the mindset of another language and prefers a loose analogy to the actual
behaviour over a factually accurate account.)
Oliver Ruebenkoenig's reply demonstrates the almost undocumented
two-argument form of Return, the existence of which (I think) suggests
that the list of constructs accepted by Return were not considered
completely indisputable by the designers of Mathematica. However, the
two-argument form still cannot be used inside Compile, where it seems it
would be most useful.
- Follow-Ups:
- Re: NMinimize problem: fct minimized uses FindRoot
- From: Oliver Ruebenkoenig <ruebenko@wolfram.com>
- Re: NMinimize problem: fct minimized uses FindRoot
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: NMinimize problem: fct minimized uses FindRoot
- References:
- NMinimize problem: fct minimized uses FindRoot
- From: "Doug Tinkham" <dtinkham@live.ca>
- NMinimize problem: fct minimized uses FindRoot