There are a lot of discussions about looping constructs (notable example here). Wolfram language guides, as usually, contain most relevant links.
Looping constructs guide has the following part on the screen.
The link ReplaceRepeated has its place of honor. Nonetheless, if you follow the link "Iterating over lists and expressions >>", ReplaceRepeated is absent. Its own page is rather laconic and has no reference to looping.
As a typical case, I have not noticed Rule-base sample among 'Multiparadigm Language' examples of the compounding task on the ads page. You may see that for 'functional paradigm' stands some:
NestList[# (1 + r) &, s, 3]
{s, (1 + r) s, (1 + r)^2 s, (1 + r)^3 s}
I could imagine something for this compounding task:
ReplaceRepeated[s, s -> s (1 + r), MaxIterations -> 3]
but it gives a warning message (by the way, how to apply a shortcut //. to assume Option MaxIteration?).
ReplaceRepeated::rrlim: Exiting after s scanned 3 times. >>>
(1 + r)^3 s
So, my question is twofold. How to efficienly apply ReplaceRepeated for looping and what are textbooks examples of 'Rule-based programming style' (or Transformation Rules) applications for looping.
After all, what is the equivalent for NestList with ReplaceRepeated?

MaxIterationsor manuallyk = s; c = 0; k //. s :> (c++; s (1 + r)) /; c < 3– Dr. belisarius Dec 03 '15 at 20:37MaxIterationsgives me warining,ReplaceRepeated::rrlim: Exiting after s scanned 3 times. Manual stuff looks not much better thanForloop. My example corrodes toUnion@Flatten@ Quiet@ReplaceRepeated[s, s -> {s, s (1 + r)}, MaxIterations -> 3]. I'm not sure that its a good candidate for the task. Why is it on the 'Looping construct guide'? – garej Dec 03 '15 at 20:47ReplaceAllwithFixedPoint. AndFixedPointis an iterative construct ... – Dr. belisarius Dec 03 '15 at 20:58ReplaceAll, that crutch would suffice:Range[3] /. n_Integer :> s (1 + r)^n. But that is a bit different story. – garej Dec 03 '15 at 22:29Quiet@is inevitable and my exampleDeleteDuplicates@ Flatten@Quiet@ ReplaceRepeated[s, s -> {s, s (1 + r)}, MaxIterations -> 3]is a good MMA practice? – garej Dec 03 '15 at 22:34Quietone could also useOff[ReplaceRepeated::rrlim]. There is also nothing wrong with getting that message printed. – Karsten7 Dec 03 '15 at 22:42ReplaceRepeatedto get that output I'd probably use something likeReplaceRepeated[{s}, {most___, rest_} :> {most, rest, rest /. s -> s (1 + r)}, MaxIterations -> 3]. – Karsten7 Dec 03 '15 at 22:53