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/

**References**:**Re: Where does Return return to?***From:*koopman@sfu.ca (Ray Koopman)