g(X, Y, Out) :- Out is X - Y. g(X, Y, Out) :- Y > 0, Y0 is Y - 1, g(X, Y0, Out). initialize(10000000). benchmark(D, _) :- findall(Out, (g(D, D, Out), 0 is Out mod 50), _).