Re: Where does Return return to?
- To: mathgroup at smc.vnet.net
- Subject: [mg48631] Re: Where does Return return to?
- From: ab_def at prontomail.com (Maxim)
- Date: Tue, 8 Jun 2004 00:48:34 -0400 (EDT)
- References: <ca1d48$d0r$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Generally speaking, Return is supposed to return a value from a function, but any Mathematica expression, except atoms, is a function. If the expression has the form While[True,List[Return[1]]], then it is not clear which function we should exit from. This naturally leads to inconsistencies: In[1]:= Module[{}, Do[Return[1], {1}]; 0] Module[{}, While[True, Return[1]]; 0] Out[1]= 0 Out[2]= Return[1] There is an undocumented form of Return using the second argument; it tells Return which function on the evaluation stack to look for: In[3]:= Module[{}, Do[Return[1, Module], {1}]; 0] Out[3]= 1 Since the head of the returned expression can happen to be Return, you can nest Return's: In[4]:= Module[{}, Do[Return[Return[1]], {1}]; 0] Out[4]= Return[1] But compare: In[5]:= Module[{}, Do[Return[Return[1, Do]], {1}]; 0] Out[5]= 0 Perhaps a more annoying inconsistency (and the explanation of why the last two examples work the way they do) is that sometimes the resulting expression is Return[1] and sometimes just 1: In[6]:= f[x_] := (If[x == 0, Return[1]]; x) g = Function[x, If[x == 0, Return[1]]; x]; f[0] == g[0] Out[8]= 1 == Return[1] Even if you're lucky enough to guess where Return will land, you still don't know what format the result will have. Much of the above applies to Break and Continue as well. Maxim Rytin m.r at inbox.ru