Re: Easy question about Character manipulation



On 30/1/07 22:05, in article wccwt346uhg.fsf@xxxxxxxxxxxxxxxxxxxx, "Robert A
Duff" <bobduff@xxxxxxxxxxxxxxxxxxxx> wrote:

type T = 1..10;
procedure P(X: var T);
var A : 1..10;
type S = 1..10;
var B : S;
var C : 1..12345;

is it legal to pass A, B, and/or C to P's X, in Pascal?

Value parameters are in effect assigned their values,
and the permissive semantics of assignment compatibility apply;
var parameters must be of equivalent types, and type-equivalence in
ISO Pascal is name-equivalence.

...which seems to say that B and C are illegal above.

Yes, and A as well.

... I claim that we're just arguing over
terminology: saying "so-and-so are different types, but there are all
kinds of implicit conversions" amounts to roughly the same thing as
"so-and-so are the same type".

It is unfortunate that the examples being used are subranges,
because the assignment compatibility rules for subranges are
the most lax. This complexity in the semantics of Pascal
is necessary because it lacks the concept of a subtype, and
is forced to smuggle in something of the facility by rather
ad hoc special rules. So to a small extent your claim is valid.

That is, "small extent" means "true for integers, but not true for
records". Right?

Not quite.
It is true for subranges of any discrete base type,
i.e. integer, char, boolean, user-defined enumerated types;
it is arguable for set types; and is definitely false for all other types.

One of the nicest things about Ada is how it cleared this mess up.

Right. I think the Ada "subtype S is Integer range 1..10" is pretty
close to Pascal's "type S = 1..10", but Pascal has no rough equivalent
to Ada's "type T is range 1..10". True?

Yes, because Pascal has no way of getting the equivalent of:

type T is new ...;

--
Bill Findlay
<surname><forename> chez blueyonder.co.uk


.