pragma Ada_2012; -- Demonstrates various ways of looping and various attributes -- Why are these important? with ada.text_io; use ada.text_io; procedure array_loops is -- An UNCONSTRAINED array type type My_U_Array_T is array(Natural range <>) of Character; -- Different sizes, same named type a4: My_U_Array_T(2 .. 5) := (others => 'x'); a5: My_U_Array_T(12 .. 25) := (12 .. 15 | 17 => 'a', others => 'z'); begin for i in a4'range loop put(a4(i)); end loop; new_line; for i in a4'first .. a4'last loop put(a4(i)); end loop; new_line; for i in a4'first .. a4'first + a4'length - 1 loop put(a4(i)); end loop; new_line; for a of a4 loop -- Iterator is a Ada 2012 feature put(a); end loop; new_line; for a of a4 loop -- Iterator allows changing the value a := Character'succ(a); -- Successor of 'x' is 'y' end loop; for a of a4 loop -- Outputs all 'y' put(a); end loop; new_line; end array_loops; -- Output: --|xxxx --|xxxx --|xxxx --|xxxx --|yyyy