MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

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.



  • Prev by Date: Re: Problem with FindFit - No more memory available.
  • Next by Date: Re: "Need tutor" scam on newsgroup?
  • Previous by thread: Re: NMinimize problem: fct minimized uses FindRoot
  • Next by thread: Re: NMinimize problem: fct minimized uses FindRoot