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