g(0). g(X) :- X > 0, X0 is X - 1, throw(continue(X0)). iterate(X) :- catch(g(X), continue(X0), iterate(X0)). initialize(10000000). slow_initialize(100). benchmark(A, _) :- iterate(A).