iterate(0, _). iterate(X, Predicate) :- Y is X - 1, Call =.. [Predicate, Y, Predicate], call(Call). initialize(10000000). slow_initialize(100). benchmark(A, _) :- iterate(A, iterate).