Ein Aggregat dient dazu, Werte von Komponenten zu Werten eines Arrays oder Records zusammenzufassen. Dabei unterscheidet man zwischen zwei Arten, wie die einzelnen Komponenten angesprochen werden, nämlich einerseits über ihre Position innerhalb des übergeordneten Typs und andererseits über ihren Namen . Es ist auch erlaubt, beide Arten zu mischen, wobei jedoch immer die Festlegung über die Position vor der über den Namen zu verwenden ist, d.h., wenn einmal eine Komponente über ihren Namen angesprochen worden ist, so dürfen alle restlichen Komponenten auch nur mehr über Namen referenziert werden.
Betrachten wir zuerst Record-Aggregate . Ein Beispiel für die Festlegung durch die Positionen der Komponenten ist:
(29, September, 1967) - siehe Typ Datum SeiteDerselbe Wert wird über benannte Komponentenfestlegung etwa ausgedrückt durch:
(Tag = 29, Monat = September, Jahr =1967)
(29, Jahr =
(29, September, Jahr =
Falls die restlichen Komponenten alle denselben Typ haben, kann man ihnen auch mit others geschlossen einen (gemeinsamen) Wert zuweisen, z.B.:
zero: constant komplex := (others =
Beispiele für Array-Aggregate sind im eindimensionalen Fall:
word_1: Acht_Bit_Vector := (true, true, true, false, false, true, false, true);
word_2: Acht_Bit_Vector := (1 =
=
word_3: Acht_Bit_Vector := (3 .. 4
Das |-Zeichen dient wieder zur Aufzählung mehrerer Index-Bereiche, für die derselbe Wert zugewiesen werden soll. Das Schlüsselwort others darf nur verwendet werden, wenn aus dem Kontext klar ist, wie groß die Grenzen des Arrays wirklich sind. Wenn das nicht eindeutig bestimmt werden kann, darf man dem Compiler ,,unter die Arme greifen``. Dies geschieht durch sogenannte qualifizierte Ausdrücke (qualified expressions) .
Das ist siche' ein T'ick!
Afrikanischer Pirat.
Renè Goscinny und Albert Uderzo,
,,Asterix auf Korsika``.
Dabei wird dem Aggregat der Typ-Bezeichner eines constrained Arrays
und außerdem ein
'
(Tick)
vorausgestellt, z.B.:
Acht_Bit_Vector'(3 .. 4
Im mehrdimensionalen Fall treten geschachtelte Aggregate auf, z.B.:
Schachbrett: Matrix(1..8, 1..8) := (1 .. 8 =
Johann Blieberger