repeat/0 is commonly used for failure driven loops, for example to read data. Below is the common skeleton:
repeat, read(Term), ( Term == end_of_file -> ! ; process(Term), fail ).
The disadvantage of such failure driven loops is that possibly failure of the process predicate does not abort the loop and thus is easily missed.