NestWhile

Usage

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.

Notes

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[, , ... , ]. It does not put the results in a list.
• The 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, {, m}] does not start applying test until at least 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.
• See Section 2.2.2.