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