MathGroup Archive 2006

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

Search the Archive

Re: documentation NestWhile

  • To: mathgroup at smc.vnet.net
  • Subject: [mg71523] Re: documentation NestWhile
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Tue, 21 Nov 2006 07:05:22 -0500 (EST)
  • Organization: The Open University, Milton Keynes, UK
  • References: <ejtcsq$i4f$1@smc.vnet.net>

ben wrote:
> Dear group,
> 
> This is an info about a possible flaw in the documentation of

I am afraid that this is misinformation. See below.

> 
> NestWhile[f, expr, test, m, max]
> 
> On my machine the order of arguments as above doesn't work,

Are you sure about that? What would have been really nice is to post an 
example of a non-working-as-claimed-by-the-doc expression.

> however
> 
> NestWhile[f, expr, test, max,m]
> 
> is fine.  I suppose there is a flow in the manual.

No.

> Bye
> Ben
> 
> the doc
> 
> "NestWhile[f, expr, test] starts with expr, then repeatedly \
> applies f until applying test to the result no longer yields True. \
> NestWhile[f, expr, test, m] supplies the most recent m results as
> arguments \
> for test at each step. NestWhile[f, expr, test, All] supplies all
> results so \
> far as arguments for test at each step. NestWhile[f, expr, test, m,
> max] \
> applies f at most max times. NestWhile[f, expr, test, m, max, n]
> applies f an \
> extra n times. NestWhile[f, expr, test, m, max, -n] returns the result
> found \
> when f had been applied n fewer times."
> 
> My Mathematica
> Version Number: 5.2.0.0
> Platform: X
> 

Note that NestWhile and NestWhileList have the same sequence of arguments.

Here we divide by two until the resulting integer is odd.

In[1]:=
NestWhileList[#1/2 & , 123456, EvenQ]

Out[1]=
{123456, 61728, 30864, 15432, 7716, 3858, 1929}

If your claim were right, that is the fourth argument is the max number 
of iterations, we should only get the initial number and the first 
result in the following expression:

In[2]:=
NestWhileList[#1/2 & , 123456, EvenQ, 1]

Out[2]=
{123456, 61728, 30864, 15432, 7716, 3858, 1929}

Moreover, still with the same hypotheses, we should not get an error 
message about too many arguments supplied to the test function EvenQ

In[3]:=
NestWhileList[#1/2 & , 123456, EvenQ, 2]

 From In[3]:=
   EvenQ::argx : EvenQ called with 2 arguments; 1 argument is expected.

Out[3]=
{123456, 61728}

Below, we can see that the behavior of NestWhileList and NestWhile is in 
agreement with the documentation: EvenQ is provided with one argument 
only and we stop after two iterations regardless of the possible outcome 
of the next iteration.

In[4]:=
NestWhileList[#1/2 & , 123456, EvenQ, 1, 2]

Out[4]=
{123456, 61728, 30864}

In[5]:=
$Version

Out[5]=
"5.2 for Microsoft Windows (June 20, 2005)"

You will get the same results with NestWhile

In[6]:=
NestWhile[#1/2 & , 123456, EvenQ]
NestWhile[#1/2 & , 123456, EvenQ, 1]
NestWhile[#1/2 & , 123456, EvenQ, 2]
NestWhile[#1/2 & , 123456, EvenQ, 1, 2]

Now, it is still possible that there is something wrong on your system 
in particular or in Mathematica for X, but, again, that would really 
help if you document such a claim by giving an example.

Regards,
Jean-Marc


  • Prev by Date: Re: Best practice for naming of options
  • Next by Date: Re: Best practice for naming of options
  • Previous by thread: Re: documentation NestWhile
  • Next by thread: Re: Re: How to determine whether a message has