declare type Point is record X, Y : Integer; end record; type Segment is array (1 .. 2) of Point; type Triangle is array (1 .. 3) of Segment; S : Segment := (1 .. 2 => (0, 0)); T : Triangle := (1 .. 3 => (1 .. 2 => (0, 0))); begin S := (S with delta (1).X | (2).Y => 12, (1).Y => 15); pragma Assert (S (1).X = 12); pragma Assert (S (2).Y = 12); pragma Assert (S (1).Y = 15); T := (T with delta (2)(1).Y => 18); pragma Assert (T (2)(1).Y = 18); end;