with ada.text_io; use ada.text_io;
with ada.integer_text_io; use ada.integer_text_io;
procedure basic_recs is
-- Declare a record type with two FIELDS
-- Its fields do not have default values
type P1 is record
x: Natural;
y: Natural;
end record;
-- For this type, the fields do have default values
type P2 is record
x: Natural := 1;
y: Natural := 2;
end record;
-- Declaration allocates record with specified name
a1: P1; -- Fields have unknown values
a2: P2; -- Fields have default values
-- Explicit initialization.
-- Overrides any default values.
b1: P1 := (3, 4); -- (3, 4) is an aggregate value
b2: P2 := (y => 6, others => 5); -- Keywords.
begin
put(b1.x); -- 3
put(b2.y); -- 6
put(a1.x); -- Unknown value printed
a1.x := 7; -- Assign one field
put(a1.x); -- 7
-- Assign with aggregate value
a1 := (8, 9);
a2 := (x => 8, y => 9); -- Keyword aggregate
put(a1.x); -- 8
b1 := (others => 10); -- Others works too
put(b1.x); -- 10
-- Element by element assignment and comparison
if a1 = b1 then put("EQ"); else put("NE"); end if;
a1 := b1;
if a1 = b1 then put("EQ"); else put("NE"); end if;
-- Type names must match for := and =.
-- a1 := a2; -- Compile error
-- if a1 = a2 then put("EQ"); else put("NE"); end if;
-- Value semantics. Compare with Java.
a1.x := 99;
if a1 = b1 then put("EQ"); else put("NE"); end if;
put(b1.x);
end basic_recs;