内部プロシージャ使えるのはいいが宣言部固定がウザい
procedure Josephus is
   type String_Pointer is access String;

   type Soldier_Type is record
      Name  : String_Pointer;
      Alive : Boolean;
   end record;

   Max_Number_Of_Soldiers: constant := 100;
   Number_Of_Soldiers    : Integer range 0..Max_Number_Of_Soldiers := 0;

   -- start with 0 to facilitate modular arithmetic
   Soldiers: array (0..Max_Number_Of_Soldiers-1) of Soldier_Type;

   procedure Next (Index: in out Integer; Interval: Positive) is
   begin
      for I in 1..Interval loop
         loop
           Index := (Index + 1) mod Number_Of_Soldiers;
           exit when Soldiers(Index).Alive;
         end loop;
      end loop;
   end Next;
begin
省略
end Josephus;