Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

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

Search the Archive

Re: Re: Where does Return return to?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg48635] Re: [mg48629] Re: Where does Return return to?
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Wed, 9 Jun 2004 04:16:52 -0400 (EDT)
  • References: <ca1d48$d0r$1@smc.vnet.net> <200406080448.AAA28414@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On 8 Jun 2004, at 13:48, Ray Koopman wrote:

> This may make the problem clearer.
> Why does Return exit Block in func1 but not in func2 or func3?
>
> In[1]:= func1 := Block[{L = 2},
>                  While[L > 1, If[True, Return[1]]; L--]; 0]
>
> In[2]:= func2 := Block[{L = 2},
>                  While[If[True, Return[1]]; --L > 1]; 0]
>
> In[3]:= func3 := Block[{},
>                  Do[If[True, Return[1]], {L,2,2,-1}]; 0]
>
> In[4]:= func1
> Out[4]= 1
>
> In[5]:= func2
> Out[5]= 0
>
> In[6]:= func3
> Out[6]= 0
>
>
>

I will explain func1 and func3. I do not want even to consider func2 as 
I never use this syntax, I see no point in its existence, and in fact I 
think it is a nuisance that ought to be got rid of.

As for the first two cases, compare


While[True, Return[1]]


Return[1]


Do[Return[1],{i,1}]


1

I think this makes it clear. The While loop returns Return[1], which 
carries over to the encompassing control structure. The Do loop returns 
only 1, which means the encompassing control structure will not be 
exited. Note that:


Block[{},Do[If[True,Return[Return[1]]],{L,2,2,-1}];0]


Return[1]

As for the reason for the difference, it seems to me (its only my 
speculation of course) that the loops are intended to be used in a 
different way, with a Do loop usually use by itself while the While 
loop more likely to be used inside the body of a function. In 
connection with this last point note that:


f[x_]:= Return[x]

will give

f[2]

2

while

Return[2]

just returns


Return[2]




Andrzej Kozlowski
Chiba, Japan
http://www.mimuw.edu.pl/~akoz/


  • Prev by Date: Re: Graphic looping error?
  • Next by Date: RE: Combining plots
  • Previous by thread: Re: Where does Return return to?
  • Next by thread: Re: Where does Return return to?