1-element arrays are invalid in VHLD?

V

valentin tihomirov

This code is accepted

type TLETTERS is array (0 to 1) of CHARACTER;
constant LETTERS: TLETTERS := ('a', 'b');

however the following is not

type TLETTERS is array (0 to 0) of CHARACTER;
constant LETTERS: TLETTERS := ('a');

IMO, this is called inconsistency (bad design).

BTW, is there a more compact (single line) way to declare a constant array
avoiding the type declaration? I guess the long preparations creating
templates (which are types in this case) are necessary for instantiating
multiple objects using this template. But I have only one array, so what is
the need to declare a special type for it? In C, we can instantiate an array
of any elements avoiding developement of special array classes for each
basic element. Am I missing something?
 
M

Mike Treseler

valentin said:
This code is accepted
type TLETTERS is array (0 to 1) of CHARACTER;
constant LETTERS: TLETTERS := ('a', 'b');
however the following is not
type TLETTERS is array (0 to 0) of CHARACTER;
constant LETTERS: TLETTERS := ('a');
IMO, this is called inconsistency (bad design).

The type isn't the problem.
The problem is ambiguity of ('a')

If ('a') is an array then parenthesis
are disallowed around character literals.
You can't have it both ways.

IMO this is an example of
incompleteness for the sake of a
logically consistent language.
This is a limit on any formal system.

For your example, this would also work:
constant LETTER: TLETTERS := (0 =>'a');

-- Mike Treseler
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top