# NestWhile

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.

# Details • NestWhile[f,expr,test] returns the first expression f[f[ f[expr]]] to which applying test does not yield True.
• If test[expr] does not yield True, NestWhile[f,expr,test] returns expr. »
• NestWhile[f,expr,test,m] at each step evaluates test[res1,res2,,resm]. It does not put the results resi in a list. »
• The resi are given in the order they are generated, with the most recent coming last.
• NestWhile[f,expr,test,m] does not start applying test until at least m results have been generated.
• NestWhile[f,expr,test,{mmin,m}] does not start applying test until at least mmin results have been generated. At each step it then supplies as arguments to test as many recent results as possible, up to a maximum of m. »
• NestWhile[f,expr,test,m] is equivalent to NestWhile[f,expr,test,{m,m}]. »
• NestWhile[f,expr,UnsameQ,2] is equivalent to FixedPoint[f,expr]. »
• NestWhile[f,expr,test,All] is equivalent to NestWhile[f,expr,test,{1,Infinity}]. »
• NestWhile[f,expr,UnsameQ,All] goes on applying f until the same result first appears more than once.
• NestWhile[f,expr,test,m,max,n] applies f an additional n times after test fails, or max applications have already been performed. »
• NestWhile[f,expr,test,m,max,-n] is equivalent to Part[NestWhileList[f,expr,test,m,max],-n-1]. »
• NestWhile[f,expr,test,m,Infinity,-1] returns, if possible, the last expression in the sequence expr, f[expr], f[f[expr]], for which test yields True.

# Examples

open all close all

## Basic Examples(2)

Keep dividing by 2 until the result is no longer an even number:

 In:= Out= Iterate taking logarithms until the result is no longer positive:

 In:= Out= ## Properties & Relations(5)

Introduced in 1999
(4.0)