Re: simple question if/while loop
- To: mathgroup at smc.vnet.net
- Subject: [mg40115] Re: simple question if/while loop
- From: atelesforos at hotmail.com (Orestis Vantzos)
- Date: Fri, 21 Mar 2003 02:36:44 -0500 (EST)
- References: <b5bk79$5t4$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
a:=Random[] is a 'delayed' assignment which means that a will give a
new random number every time it is called.
Hence a>.5 will test one number but tb[[n]]=a will store another!
Use a=Random[] instead and move it inside the While.
By the way your code is a very bad example of Mathematica programming;
Mathematica is better programmed using list operations, like Join, Inner, etc.
It's better to begin with an empty list tb={} and just add the new
elements using Join.
I would recommend something like the following:
TestListFun[]:=Module[{a,tb,n},
tb = {};
n = 1;
While[ n<5,
a = Random[];
If[ a>.5, Join[tb,{a}];n++];
(* no need for Continue[] *)
];
tb
]
Realizing that n is just the length of the list we can just use the
following:
TestListFun2[]:=Module[{tb,a},
tb = {};
While[ Length[tb]<4,
a = Random[];
If[a>.5, Join[tb,{a}]];
]
tb
]
Finally the functional approach:
NestWhile[
Module[{a}, If[(a = Random[]) > .5, Join[#, {a}], #]] &,
{},
Length[#] < 4 &
]
will return what you want.
Orestis
s kp <kpsj2002 at yahoo.com> wrote in message news:<b5bk79$5t4$1 at smc.vnet.net>...
> I am trying to do the following for a test purpose so I am a learning mathematica
>
> TestFun[] := Module[{a, tb, n},
> tb = Table[0.0, {4}];
> n := 1;
> a := Random[];
> While[n < 5,
> If[ a > .5,
> (tb[[n]] = a;
> n++;), Continue[]
> ]
> ]
> tb
> ]
>
> The output that I get is
>
> {0.871577 Null, 0.512558 Null, 0.00441806 Null, 0.520545 Null}
>
> Why am I doing wrong here and what is the correct way to do the above thing using If and While loop?
>
> thanks