Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*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 2002

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

Search the Archive

RE: How to Return from within a Table[]-Command?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg33759] RE: [mg33728] How to Return from within a Table[]-Command?
  • From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.com>
  • Date: Thu, 11 Apr 2002 02:14:17 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

> -----Original Message-----
> From: Detlef Mueller [mailto:dmueller at mathematik.uni-kassel.de]
To: mathgroup at smc.vnet.net
> Sent: Wednesday, April 10, 2002 6:49 AM
> To: mathgroup at smc.vnet.net
> Subject: [mg33759] [mg33728] How to Return from within a Table[]-Command?
> 
> 
> Hello,
> 
> I wanted to scan trough al List, building a new
> List, but aborting, if one Element of the first
> List violates a special Condition ... 
> say for example:
> 
> Divide2[L_List] := Module[{},
>     Table[
>       If[IntegerQ[L[[i]]],
>         i/2, 
>         Return["vector not valid."];
>         ]
>       , {i, 1, Length[L]}
>       ]
> 
>     ...
> 
>     ]
> 
> But this results:
> 
> In[13]:= Divide2[{2,3,a}]
> Out[13]= {1/2, 1, Return["vector not valid."]}
> 
> Wich is of course not what I want.
> 
> Greetings
> 
>   Detlef
> 

Detlef,

two suggestions:

(1) Catch and Throw:
 
In[1]:= Divide2a[L_List] := 
  Catch[Module[{}, 
      Table[If[IntegerQ[L[[i]]], i/2, Throw["vector not valid."];], 
            {i, 1, Length[L]}] + 0]]

In[2]:= Divide2a[{2, 3, a, 5}]
Out[2]= "vector not valid."

In[3]:= Divide2a[{2, 3, 4, 5}]
Out[3]= {1/2, 1, 3/2, 2}


(-) Issue an error Message:
 
In[4]:= Divide2b[L_List] := 
  Module[{}, 
    Table[If[IntegerQ[L[[i]]], i/2, Message[Divide2b::invalid]], 
          {i, 1, Length[L]}] + 0]

In[5]:= Divide2b::"invalid" = "vector not valid.";

In[6]:= Divide2b[{2, 3, a, 5}]
>From In[6]:= Divide2b::"invalid": "vector not valid."
Out[6]= {1/2, 1, Null, 2}

In[7]:= Divide2b[{2, 3, 4, 5}]
Out[7]= {1/2, 1, 3/2, 2}

Although you got the message, you also got an undesired Result.
Prevent this with

(2) Check:

In[8]:= Check[Divide2b[{2, 3, a, 5}], $Aborted, Divide2b::invalid]
>From In[8]:= Divide2b::"invalid": "vector not valid."
Out[8]= $Aborted

In[9]:= Check[Divide2b[{2, 3, 4, 5}], Null, Divide2b::invalid]
Out[9]= {1/2, 1, 3/2, 2}

If Divide2b is buried in a comprehensive calculation, which you want to have
aborted totally, then wrap that into Check. Of course, instead of $Aborted
you may return any value, Null e.g., which will not be printed.

--
Hartmut Wolf



  • Prev by Date: Help
  • Next by Date: Programming in Mathematica
  • Previous by thread: Re: How to Return from within a Table[]-Command?
  • Next by thread: Re: How to Return from within a Table[]-Command?