:- dynamic(iterate/1). iterate(a). initialize(10000000) :- assert(iterate(0)), assert((iterate(X) :- (Y is X - 1, iterate(Y)))). slow_initialize(100). benchmark(A, _) :- iterate(A).