Вот способ запускать действия каждые 10 шагов:
for I in Integer'Range loop
-- do something every steps
if (I mod 10 = 0) then
-- do something every 10 steps
end if;
end loop;
Обычно делается явное приращение:
declare
I : T := Start;
begin
loop
exit when I > Stop;
-- do something every Step steps
I := I + Step;
end loop;
end;
Иногда вам нужен немного другой тест:
declare
I : T := Start;
begin
loop
-- do something every Step steps
exit when I > Stop - Step;
I := I + Step;
end loop;
end;
когда это последнее приращение переполнится. Или вы можете обработать исключение.