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