Un tipo compuesto que no sea un array o una interfaz pude tener discriminantes que parametrizan el tipo.
discriminant_part ::= unknown_discriminant_part | known_discriminant_part unknown_discriminant_part ::= (<>) known_discriminant_part ::= (discriminant_specification {; discriminant_specification}) discriminant_specification ::= defining_identifier_list : [null_exclusion] subtype_mark [:= expression] | defining_identifier_list : access_definition [:= expression]
type Matriz_Base is array (Integer range <>, Integer range <>) of Float;
-- Record con dos discriminantes (Filas y Columnas) type Matriz (Filas, Columnas: Positive) is record Valores : Matriz_Base (1 .. Filas, 1 .. Columnas); end Matriz;