Re: While Loop
- To: mathgroup at smc.vnet.net
- Subject: [mg123571] Re: While Loop
- From: "Oleksandr Rasputinov" <oleksandr_rasputinov at hmamail.com>
- Date: Sun, 11 Dec 2011 03:49:23 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jbvjus$j47$1@smc.vnet.net> <op.v596hug2qcgwdu@core2.lan>
On Sat, 10 Dec 2011 15:54:56 -0000, Oleksandr Rasputinov
<oleksandr_rasputinov at hmamail.com> wrote:
> On Sat, 10 Dec 2011 12:39:56 -0000, Joao <joaopereira9 at gmail.com> 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, 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.
>
> For the syntactical form you give above, test (not "the test", but "the
> expression called test") is always evaluated before body (ditto). This
> is standard in Mathematica in that function arguments normally evaluate
> from right to left. However, what the documentation is saying is that
> there are variant forms you can use to have "the test" evaluated after
> "the body". You can, of course, use
>
> While[True, body; If[test, Break[]]]
>
> but I think the clearest way is the one which omits body entirely ("the
> expression called body" is implicitly Null). For example,
>
> i = 5; While[Print[--i]; i > 0]
>
> which prints
>
> 4
> 3
> 2
> 1
> 0
>
> and thus demonstrates that it meets your requirements.
Sorry, I should have said "left to right" in the above but was apparently
not paying enough attention to what I was writing. Functions that violate
this convention often call it out specifically in their documentation; For
is an example of a function with non-standard evaluation order.