MathGroup Archive 2011

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

Search the Archive

Re: While Loop

  • To: mathgroup at smc.vnet.net
  • Subject: [mg123567] Re: While Loop
  • From: "Nasser M. Abbasi" <nma at 12000.org>
  • Date: Sun, 11 Dec 2011 03:48:39 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <jbvjus$j47$1@smc.vnet.net>
  • Reply-to: nma at 12000.org

On 12/10/2011 6:39 AM, Joao wrote:
> Hi, everybody
>
> Could someone help me regarding the While Loop.
>
> While[test,body]
>
> In the help "While" it is stated that the test may be evaluated at the end of the loop,

The test is always done at the top.

ButThe example you refer to, which is

------------------------------------
Test the condition during or at the end of the loop:

While[True,
  n = Input["enter an integer"];
  If[! IntegerQ[n] || n <= 0, Break[]];
  Print[n, "=", FactorInteger[n]]
  ]
----------------------------

The 'test' which is being done at the end of the loop above is not the same
test which 'While' does automatically.

It is meant to show that one can manually do a check at the end (or at any
point for that matter), and then use Break to manually end the loop. May
be the example can be re-written better that it was.

Some languages even has a construct like this

LOOP
  ..
  ..
  IF(...) THEN Break;
END LOOP

Not a 'while' and not a 'Do', but just a LOOP where one must use Break
to exists the loop manually.

>  instead of at the beginning. However in the tutorial on Loops and Control structures
>it is stated that the While always evaluates the test at the beginning.
>
> I would like to know if it is really possible to evaluate the test inside de While
>at the end of the loop. This is a feature that would be useful for what I'm doing,

Yes you can. See the example above. You need to do it manually and use Break to exit
the loop.

>however I haven't been able to get it working and I don't know, taking into consideration
>the above, if I am doing something wrong or if it is really not possible to do.
>
> Thanks in advance
>
> Joao
>

If that is what you want, (i.e run the loop at least ONE time, and
then do a check at the end) then may be you can use Do[].  Like this:

---------------------
Clear[i]
Do[
  Print["i=", i];

  If[i == 3, Break[]],  (*the check is done at the bottom of the loop*)

  {i, 0, 10}
]
--------------------

In the above, the loop will at least run ONE time, as compared to
the While loop, which is possible to run zero times since the check
is done at the start of the loop.

-------------- runs at least ONE time -------------------
Clear[i]
Do[
  Print["i=", i];
  If[i == 0, Break[]],  (*the check is done at the bottom of the loop*)
  {i, 0, 10}
  ]
--------------------------------------------------------

The above will print '0', then stops.

--Nasser








  • Prev by Date: Re: Crashing problem with 3d IFS program
  • Next by Date: Re: Can FindFit take two (or more) equations?
  • Previous by thread: Re: While Loop
  • Next by thread: Re: While Loop