An obvious, but bad approach
Suppose we had a function called for to which we could give
- a starting value for a variable
- a way to compute the variable's next value from the current one
- a way to test if we're done, and
- a function to evaluate
That's not enough, for a subtle reason