Re: NestWhile
- To: mathgroup at smc.vnet.net
- Subject: [mg23055] Re: [mg23039] NestWhile
- From: Hartmut Wolf <hwolf at debis.com>
- Date: Sat, 15 Apr 2000 03:00:18 -0400 (EDT)
- Organization: debis Systemhaus
- References: <200004130643.CAA24830@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Alan W.Hopper schrieb:
>
> Others like myself who are still using Mathematica 3, may have been
> interested to see that the new cryptic @@@ function can be programmed
> into a user function for version 3, as explained by Hartmut Wolf and
> Daniel Reeves.
>
> But I have a query to pose about another new version 4 function ,
> that is NestWhile, which I assume can also be approximated in version
> 3.0.
>
> This code was taken from Eric Weisstein's IntegerSequences.m package,
> obtained from the mathworld.wolfram site ;
>
> KeithNumberQ[n_Integer?Positive]:=(KeithSequence[n][[-1]] == n)
>
> KeithSequence[n_Integer?Positive]:= Module[{d = IntegerDigits[n], l},
> l = Length[d];
> NestWhile[Append[#, Plus @@ Take[#,-l]] &, d, #[[-1]] < n &]
> ]
>
> The first Keith Number is 197 and it's Keith Sequence should be
> {1, 9, 7, 17, 33, 57, 107, 197}, or similar.
>
> as starting with the digits of 197 ,
> 1 + 9 + 7 = 17
> 9 + 7 + 17 = 33
> 7 + 17 + 33 = 57
> 17 + 33 + 57 = 107
> 33 + 57 + 107 = 197
>
> Other small Keith Numbers are 742, 1104, 1537, 2208,
> a large one is 97295849958669 .
> (see Don Piele - Mathematica Pearls - Mathematica in Research and
> Education - Vol 6 No 3 , p 50, also Vol 7 No 1, p 45.
>
> So the question is how can a Mathematica 3 version of NestWhile be
> substituted into the above code?
>
Dear Alan,
NestWhile is a function with a plentiful interface, so it would cost
some effort to mimik it. However the candidate for a substitution in
Version 3 is FixedPoint and use SameTest for exiting.
For the Keith numbers I'd propose
In[10]:=
KeithNumberQ[n_Integer?Positive] := (KeithSequence2[n][[-1]] == n)
In[11]:= KeithSequence[n_Integer?Positive] :=
Module[{d = IntegerDigits[n], l}, l = Length[d];
FixedPointList[Append[#, Plus @@ Take[#, -l]] &, d,
SameTest -> (! #[[-1]] < n &)]][[-2]]
In[12]:= KeithSequence[197]
Out[12]= {1, 9, 7, 17, 33, 57, 107, 197}
In[13]:= KeithNumberQ[197]
Out[13]= True
So negate the NestWhile condition for SameTest, but when FixedPoint then
stops it has run one step too far, so get one back in ListFixedPoint. I
have not the time now, but you may continue that reasoning for building
up the full interface.
Kind regards, Hartmut
- References:
- NestWhile
- From: "Alan W.Hopper" <awhopper@hermes.net.au>
- NestWhile