Re: How to Return from within a Table[]-Command?
- To: mathgroup at smc.vnet.net
- Subject: [mg33763] Re: [mg33728] How to Return from within a Table[]-Command?
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Thu, 11 Apr 2002 02:14:27 -0400 (EDT)
- References: <200204100449.AAA20770@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Detlef Mueller wrote: > 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 Do you really need an error message? You can use Abort for that, but if all you want to do is process until a condition occurs use recursion divide2[l_List]:=If[l=={},{},Block[{f=First[l]},If[IntegerQ[f],Flatten[{f/2,divide2[Rest[l]]}],{}]]]. With Abort it becomes: divide2::"invalid" = "Vector must be all integers"; divide2[l_List]:=If[l=={},{},Block[{f=First[l]},If[IntegerQ[f],Flatten[{f/2,divide2[Rest[l]]}],Message[divide2::"invalid"];Abort[]]]] I suppose you can use Catch and Throw if you can figure out a reasonable value to Throw back. If all you want to do is check if the list didn't contain only integers use the VectorQ function divide2[l_?(VectorQ[#,IntegerQ[#]&]&)]:=l/2 which won't process a list unless it contains only integers. Regards, Sseziwa
- References:
- How to Return from within a Table[]-Command?
- From: Detlef Mueller <dmueller@mathematik.uni-kassel.de>
- How to Return from within a Table[]-Command?