Re: Named Integers

From: [at]} <Stan>
Date: Wed, 1 Dec 2004 09:43:03 -0800

----boundary-LibPST-iamunique-1452500437_-_-
Content-type: text/plain

>> of the problem in practice. Named integers solve a common
>> problem with a minimum implementation cost.
>

> That depends on their *complete* definition. The fact that they are a
> named type means there are additional considerations compared to the
> used of CONSTs that have not been mentioned.

I think their complete definition is give by the specification:

TYPE Alpha = (beta, gamma, delta);

is equivalent to

TYPE Alpha = INTEGER;
CONST beta = 0; gamma = 1; delta = 2;

and

TYPE Alpha* = (beta, gamma, delta);

is equivalent to

TYPE Alpha* = INTEGER;
CONST beta* = 0; gamma* = 1; delta* = 2;

That is all. Nothing else. No changing the start value, no skipping
values or assigning arbitrary values in the middle, no range checking,
no special scope rules for the identifiers.

Keep it simple.

> There are a number of
> questions that need to be addressed. These include but are not limited
> to:
>
> 1. What are the compatibility rules of named integers with other
> ordinal
> types?
>
> VAR
> c: Colour;
>
> Is c := 1 acceptable?

The specification says "yes". c:= 1 is acceptable.
c is an INTEGER. The specification does not prevent
the programmer from misusing the feature.

> 2. What are the compatibility rules of a variable of one type of named
> integers with another? For example, Given:
>
> TYPE
> Colour = (green, orange, yellow);
> Fruit = (fApple, fOrange, fBanana);
>
> VAR
> c: Colour;
> fruit: Fruit;
> ...
> ...
>
> does
>
> fruit := orange;
>
> result in an error?

The specification says "no", fruit := orange does not result in an
error.
fruit is an integer. orange is an integer constant. The specification
does
not prevent the programmer from writing badly documented code.

> 3. Can named integers be used wherever integers can be used.

Yes. Named integers _are_ integers.

> Fore
> example, does the INC function accept a named integer as a parameter?

Yes. Named integers _are_ integers.

> If
> yes and Colour is a named integer type:
>
> TYPE
> Colour = (red, yellow, blue);
>
> VAR
> c: Colour;
>
> What is the result of:
>
> c := blue;
> c := INC(c);

Postcondition is c = 3.

> etc. etc.

How many more etc.'s do you wish too enquire about?
They are all handled by the specification.

> These are just a few that I thought of, off the top of my head.
>
> Before responding to each issue, I recommend that you go through the
> actual exercise of modifying the Language Report thoroughly to
> accommodate the proposed feature of Named Integers and then reconsider
> whether the implementation cost would be minimal.

I have done that. I challenge anyone to come up with a problematic
scenario that is not handled by the specification.

> I haven't tried it
> myself, but I suspect that the corresponding effort would not be
> significantly less than actually implementing an 'enumerated type'
> feature.

But that suspicion is countered by the fact that enumerated types
were rejected by the designers of CP because of implementation
difficulties. Similarly, range types from Pascal were rejected. You
could define a type

Year = 1800..2050;

that is an integer with range checking. Your example c := INC(c)
was probably motivated with range checking in mind.

My point is that programmers are so used to having _all_ of the
features of enumerated types or, in the case of CP, _none_ of
the features of enumerated types, that nobody considers named
integers as a compromise. Named integers would be a trivial
implementation for the compiler writers, but would provide the
valuable feature of self-documentation. It does not force the
programmer to write good self-documenting code, but it makes
it easy for the programmer to do so with virtually no added
complexity to the type system of the language. It is convenient
syntax that, unlike enumerated types, has _no_ impact on the
type semantics of the language.

Cheers,
Stan

J. Stanley Warford
Professor of Computer Science
Pepperdine University
Malibu, CA 90263
Stan.Warford{([at]})nowhere.xy
310-506-4332

--------------------------------------------

To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
   blackbox-request{([at]})nowhere.xy

To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.

Send any problem reports or questions related to this email list to the list owner at
   owner-blackbox{([at]})nowhere.xy

Current posting policy:

a) To post you should use the same address by which you are subscribed to the mailing list. That way, the list server will recognize you as subscriber and forward your posting immediately, without creating any overhead.

b) If, for some reason, you cannot post from the address, by which you are subscribed, your message will be moderated to avoid spam. Please understand that moderation will often cause some delay, in particular over weekends or holydays.


----boundary-LibPST-iamunique-1452500437_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"

e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzcyBBcmlhbDt9DQp7XGYxXGZtb2Rlcm4gQ291cmllciBOZXc7fQ0Ke1xmMlxmbmlsXGZjaGFy
c2V0MiBTeW1ib2w7fQ0Ke1xmM1xmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyIE5ldzt9fQ0Ke1xj
b2xvcnRibFxyZWQwXGdyZWVuMFxibHVlMDtccmVkMFxncmVlbjBcYmx1ZTI1NTt9DQpcdWMxXHBh
cmRccGxhaW5cZGVmdGFiMzYwIFxmMFxmczIwID4+IG9mIHRoZSBwcm9ibGVtIGluIHByYWN0aWNl
LiBOYW1lZCBpbnRlZ2VycyBzb2x2ZSBhIGNvbW1vblxwYXINCj4+IHByb2JsZW0gd2l0aCBhIG1p
bmltdW0gaW1wbGVtZW50YXRpb24gY29zdC5ccGFyDQo+XHBhcg0KPiBUaGF0IGRlcGVuZHMgb24g
dGhlaXIgKmNvbXBsZXRlKiBkZWZpbml0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGFccGFy
DQo+IG5hbWVkIHR5cGUgbWVhbnMgdGhlcmUgYXJlIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbnMg
Y29tcGFyZWQgdG8gdGhlXHBhcg0KPiB1c2VkIG9mIENPTlNUcyB0aGF0IGhhdmUgbm90IGJlZW4g
bWVudGlvbmVkLlxwYXINClxwYXINCkkgdGhpbmsgdGhlaXIgY29tcGxldGUgZGVmaW5pdGlvbiBp
cyBnaXZlIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOlxwYXINClxwYXINClRZUEUgQWxwaGEgPSAoYmV0
YSwgZ2FtbWEsIGRlbHRhKTtccGFyDQpccGFyDQppcyBlcXVpdmFsZW50IHRvXHBhcg0KXHBhcg0K
VFlQRSBBbHBoYSA9IElOVEVHRVI7XHBhcg0KQ09OU1QgYmV0YSA9IDA7IGdhbW1hID0gMTsgZGVs
dGEgPSAyO1xwYXINClxwYXINCmFuZFxwYXINClxwYXINClRZUEUgQWxwaGEqID0gKGJldGEsIGdh
bW1hLCBkZWx0YSk7XHBhcg0KXHBhcg0KaXMgZXF1aXZhbGVudCB0b1xwYXINClxwYXINClRZUEUg
QWxwaGEqID0gSU5URUdFUjtccGFyDQpDT05TVCBiZXRhKiA9IDA7IGdhbW1hKiA9IDE7IGRlbHRh
KiA9IDI7XHBhcg0KXHBhcg0KVGhhdCBpcyBhbGwuIE5vdGhpbmcgZWxzZS4gTm8gY2hhbmdpbmcg
dGhlIHN0YXJ0IHZhbHVlLCBubyBza2lwcGluZ1xwYXINCnZhbHVlcyBvciBhc3NpZ25pbmcgYXJi
aXRyYXJ5IHZhbHVlcyBpbiB0aGUgbWlkZGxlLCBubyByYW5nZSBjaGVja2luZyxccGFyDQpubyBz
cGVjaWFsIHNjb3BlIHJ1bGVzIGZvciB0aGUgaWRlbnRpZmllcnMuXHBhcg0KXHBhcg0KS2VlcCBp
dCBzaW1wbGUuXHBhcg0KXHBhcg0KPiBUaGVyZSBhcmUgYSBudW1iZXIgb2ZccGFyDQo+IHF1ZXN0
aW9ucyB0aGF0IG5lZWQgdG8gYmUgYWRkcmVzc2VkLiBUaGVzZSBpbmNsdWRlIGJ1dCBhcmUgbm90
IGxpbWl0ZWRccGFyDQo+IHRvOlxwYXINCj5ccGFyDQo+IDEuIFdoYXQgYXJlIHRoZSBjb21wYXRp
YmlsaXR5IHJ1bGVzIG9mIG5hbWVkIGludGVnZXJzIHdpdGggb3RoZXIgXHBhcg0KPiBvcmRpbmFs
XHBhcg0KPiB0eXBlcz9ccGFyDQo+XHBhcg0KPiBWQVJccGFyDQo+ICAgYzogQ29sb3VyO1xwYXIN
Cj5ccGFyDQo+IElzIGMgOj0gMSBhY2NlcHRhYmxlP1xwYXINClxwYXINClRoZSBzcGVjaWZpY2F0
aW9uIHNheXMgInllcyIuIGM6PSAxIGlzIGFjY2VwdGFibGUuXHBhcg0KYyBpcyBhbiBJTlRFR0VS
LiBUaGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBwcmV2ZW50XHBhcg0KdGhlIHByb2dyYW1tZXIg
ZnJvbSBtaXN1c2luZyB0aGUgZmVhdHVyZS5ccGFyDQpccGFyDQo+IDIuIFdoYXQgYXJlIHRoZSBj
b21wYXRpYmlsaXR5IHJ1bGVzIG9mIGEgdmFyaWFibGUgb2Ygb25lIHR5cGUgb2YgbmFtZWRccGFy
DQo+IGludGVnZXJzIHdpdGggYW5vdGhlcj8gRm9yIGV4YW1wbGUsIEdpdmVuOlxwYXINCj5ccGFy
DQo+IFRZUEVccGFyDQo+ICAgQ29sb3VyID0gKGdyZWVuLCBvcmFuZ2UsIHllbGxvdyk7XHBhcg0K
PiAgIEZydWl0ID0gKGZBcHBsZSwgZk9yYW5nZSwgZkJhbmFuYSk7XHBhcg0KPlxwYXINCj4gVkFS
XHBhcg0KPiAgIGM6IENvbG91cjtccGFyDQo+ICAgZnJ1aXQ6IEZydWl0O1xwYXINCj4gLi4uXHBh
cg0KPiAuLi5ccGFyDQo+XHBhcg0KPiBkb2VzXHBhcg0KPlxwYXINCj4gICBmcnVpdCA6PSBvcmFu
Z2U7XHBhcg0KPlxwYXINCj4gcmVzdWx0IGluIGFuIGVycm9yP1xwYXINClxwYXINClRoZSBzcGVj
aWZpY2F0aW9uIHNheXMgIm5vIiwgZnJ1aXQgOj0gb3JhbmdlIGRvZXMgbm90IHJlc3VsdCBpbiBh
biBccGFyDQplcnJvci5ccGFyDQpmcnVpdCBpcyBhbiBpbnRlZ2VyLiBvcmFuZ2UgaXMgYW4gaW50
ZWdlciBjb25zdGFudC4gVGhlIHNwZWNpZmljYXRpb24gXHBhcg0KZG9lc1xwYXINCm5vdCBwcmV2
ZW50IHRoZSBwcm9ncmFtbWVyIGZyb20gd3JpdGluZyBiYWRseSBkb2N1bWVudGVkIGNvZGUuXHBh
cg0KXHBhcg0KPiAzLiBDYW4gbmFtZWQgaW50ZWdlcnMgYmUgdXNlZCB3aGVyZXZlciBpbnRlZ2Vy
cyBjYW4gYmUgdXNlZC5ccGFyDQpccGFyDQpZZXMuIE5hbWVkIGludGVnZXJzIF9hcmVfIGludGVn
ZXJzLlxwYXINClxwYXINCj4gRm9yZVxwYXINCj4gZXhhbXBsZSwgZG9lcyB0aGUgSU5DIGZ1bmN0
aW9uIGFjY2VwdCBhIG5hbWVkIGludGVnZXIgYXMgYSBwYXJhbWV0ZXI/XHBhcg0KXHBhcg0KWWVz
LiBOYW1lZCBpbnRlZ2VycyBfYXJlXyBpbnRlZ2Vycy5ccGFyDQpccGFyDQo+IElmXHBhcg0KPiB5
ZXMgYW5kIENvbG91ciBpcyBhIG5hbWVkIGludGVnZXIgdHlwZTpccGFyDQo+XHBhcg0KPiBUWVBF
XHBhcg0KPiAgIENvbG91ciA9IChyZWQsIHllbGxvdywgYmx1ZSk7XHBhcg0KPlxwYXINCj4gVkFS
XHBhcg0KPiAgIGM6IENvbG91cjtccGFyDQo+XHBhcg0KPiBXaGF0IGlzIHRoZSByZXN1bHQgb2Y6
XHBhcg0KPlxwYXINCj4gICBjIDo9IGJsdWU7XHBhcg0KPiAgIGMgOj0gSU5DKGMpO1xwYXINClxw
YXINClBvc3Rjb25kaXRpb24gaXMgYyA9IDMuXHBhcg0KXHBhcg0KPiBldGMuIGV0Yy5ccGFyDQpc
cGFyDQpIb3cgbWFueSBtb3JlIGV0Yy4ncyBkbyB5b3Ugd2lzaCAgdG9vIGVucXVpcmUgYWJvdXQ/
XHBhcg0KVGhleSBhcmUgYWxsIGhhbmRsZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXHBhcg0KXHBh
cg0KPiBUaGVzZSBhcmUganVzdCBhIGZldyB0aGF0IEkgdGhvdWdodCBvZiwgb2ZmIHRoZSB0b3Ag
b2YgbXkgaGVhZC5ccGFyDQo+XHBhcg0KPiBCZWZvcmUgcmVzcG9uZGluZyB0byBlYWNoIGlzc3Vl
LCBJIHJlY29tbWVuZCB0aGF0IHlvdSBnbyB0aHJvdWdoIHRoZVxwYXINCj4gYWN0dWFsIGV4ZXJj
aXNlIG9mIG1vZGlmeWluZyB0aGUgTGFuZ3VhZ2UgUmVwb3J0IHRob3JvdWdobHkgdG9ccGFyDQo+
IGFjY29tbW9kYXRlIHRoZSBwcm9wb3NlZCBmZWF0dXJlIG9mIE5hbWVkIEludGVnZXJzIGFuZCB0
aGVuIHJlY29uc2lkZXJccGFyDQo+IHdoZXRoZXIgdGhlIGltcGxlbWVudGF0aW9uIGNvc3Qgd291
bGQgYmUgbWluaW1hbC5ccGFyDQpccGFyDQpJICBoYXZlIGRvbmUgdGhhdC4gSSBjaGFsbGVuZ2Ug
YW55b25lIHRvIGNvbWUgdXAgd2l0aCBhIHByb2JsZW1hdGljXHBhcg0Kc2NlbmFyaW8gdGhhdCBp
cyBub3QgaGFuZGxlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5ccGFyDQpccGFyDQo+IEkgaGF2ZW4n
dCB0cmllZCBpdFxwYXINCj4gbXlzZWxmLCBidXQgSSBzdXNwZWN0IHRoYXQgdGhlIGNvcnJlc3Bv
bmRpbmcgZWZmb3J0IHdvdWxkIG5vdCBiZVxwYXINCj4gc2lnbmlmaWNhbnRseSBsZXNzIHRoYW4g
YWN0dWFsbHkgaW1wbGVtZW50aW5nIGFuICdlbnVtZXJhdGVkIHR5cGUnXHBhcg0KPiBmZWF0dXJl
LlxwYXINClxwYXINCkJ1dCB0aGF0IHN1c3BpY2lvbiBpcyBjb3VudGVyZWQgYnkgdGhlIGZhY3Qg
dGhhdCBlbnVtZXJhdGVkIHR5cGVzXHBhcg0Kd2VyZSByZWplY3RlZCBieSB0aGUgZGVzaWduZXJz
IG9mIENQIGJlY2F1c2Ugb2YgaW1wbGVtZW50YXRpb25ccGFyDQpkaWZmaWN1bHRpZXMuIFNpbWls
YXJseSwgcmFuZ2UgdHlwZXMgZnJvbSBQYXNjYWwgd2VyZSByZWplY3RlZC4gWW91XHBhcg0KY291
bGQgZGVmaW5lIGEgdHlwZVxwYXINClxwYXINClllYXIgPSAxODAwLi4yMDUwO1xwYXINClxwYXIN
CnRoYXQgaXMgYW4gaW50ZWdlciB3aXRoIHJhbmdlIGNoZWNraW5nLiBZb3VyIGV4YW1wbGUgYyA6
PSBJTkMoYylccGFyDQp3YXMgcHJvYmFibHkgbW90aXZhdGVkIHdpdGggcmFuZ2UgY2hlY2tpbmcg
aW4gbWluZC5ccGFyDQpccGFyDQpNeSBwb2ludCBpcyB0aGF0IHByb2dyYW1tZXJzIGFyZSBzbyB1
c2VkIHRvIGhhdmluZyBfYWxsXyBvZiB0aGVccGFyDQpmZWF0dXJlcyBvZiBlbnVtZXJhdGVkIHR5
cGVzIG9yLCBpbiB0aGUgY2FzZSBvZiBDUCwgX25vbmVfIG9mXHBhcg0KdGhlIGZlYXR1cmVzIG9m
IGVudW1lcmF0ZWQgdHlwZXMsIHRoYXQgbm9ib2R5IGNvbnNpZGVycyBuYW1lZFxwYXINCmludGVn
ZXJzIGFzIGEgY29tcHJvbWlzZS4gTmFtZWQgaW50ZWdlcnMgd291bGQgYmUgYSB0cml2aWFsXHBh
cg0KaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjb21waWxlciB3cml0ZXJzLCBidXQgd291bGQgcHJv
dmlkZSB0aGVccGFyDQp2YWx1YWJsZSBmZWF0dXJlIG9mIHNlbGYtZG9jdW1lbnRhdGlvbi4gSXQg
ZG9lcyBub3QgZm9yY2UgdGhlXHBhcg0KcHJvZ3JhbW1lciB0byB3cml0ZSBnb29kIHNlbGYtZG9j
dW1lbnRpbmcgY29kZSwgYnV0IGl0IG1ha2VzXHBhcg0KaXQgZWFzeSBmb3IgdGhlIHByb2dyYW1t
ZXIgdG8gZG8gc28gd2l0aCB2aXJ0dWFsbHkgbm8gYWRkZWRccGFyDQpjb21wbGV4aXR5IHRvIHRo
ZSB0eXBlIHN5c3RlbSBvZiB0aGUgbGFuZ3VhZ2UuIEl0IGlzIGNvbnZlbmllbnRccGFyDQpzeW50
YXggdGhhdCwgdW5saWtlIGVudW1lcmF0ZWQgdHlwZXMsIGhhcyBfbm9fIGltcGFjdCBvbiB0aGVc
cGFyDQp0eXBlIHNlbWFudGljcyBvZiB0aGUgbGFuZ3VhZ2UuXHBhcg0KXHBhcg0KQ2hlZXJzLFxw
YXINClN0YW5ccGFyDQpccGFyDQpKLiBTdGFubGV5IFdhcmZvcmRccGFyDQpQcm9mZXNzb3Igb2Yg
Q29tcHV0ZXIgU2NpZW5jZVxwYXINClBlcHBlcmRpbmUgVW5pdmVyc2l0eVxwYXINCk1hbGlidSwg
Q0EgOTAyNjNccGFyDQpTdGFuLldhcmZvcmRAcGVwcGVyZGluZS5lZHVccGFyDQozMTAtNTA2LTQz
MzJccGFyDQpccGFyDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxwYXINClxwYXINClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBtYWlsaW5nIGxpc3QsIHNlbmQg
YSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgInVuc3Vic2NyaWJlIiB0bzpccGFyDQogICBi
bGFja2JveC1yZXF1ZXN0QG9iZXJvbi5jaFxwYXINClxwYXINClRvIGdldCBhIGxpc3Qgb2YgdmFs
aWQgZS1tYWlsIGNvbW1hbmRzIGFuZCBpbnN0cnVjdGlvbnMgb24gdGhlaXIgdXNhZ2UsIHNlbmQg
YSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHdvcmQgImhlbHAiIHRvIHRoZSBhYm92ZSBhZGRyZXNz
LlxwYXINClxwYXINClNlbmQgYW55IHByb2JsZW0gcmVwb3J0cyBvciBxdWVzdGlvbnMgcmVsYXRl
ZCB0byB0aGlzIGVtYWlsIGxpc3QgdG8gdGhlIGxpc3Qgb3duZXIgYXRccGFyDQogICBvd25lci1i
bGFja2JveEBvYmVyb24uY2hccGFyDQpccGFyDQpDdXJyZW50IHBvc3RpbmcgcG9saWN5OlxwYXIN
ClxwYXINCmEpIFRvIHBvc3QgeW91IHNob3VsZCB1c2UgdGhlIHNhbWUgYWRkcmVzcyBieSB3aGlj
aCB5b3UgYXJlIHN1YnNjcmliZWQgdG8gdGhlIG1haWxpbmcgbGlzdC4gVGhhdCB3YXksIHRoZSBs
aXN0IHNlcnZlciB3aWxsIHJlY29nbml6ZSB5b3UgYXMgc3Vic2NyaWJlciBhbmQgZm9yd2FyZCB5
b3VyIHBvc3RpbmcgaW1tZWRpYXRlbHksIHdpdGhvdXQgY3JlYXRpbmcgYW55IG92ZXJoZWFkLlxw
YXINClxwYXINCmIpIElmLCBmb3Igc29tZSByZWFzb24sIHlvdSBjYW5ub3QgcG9zdCBmcm9tIHRo
ZSBhZGRyZXNzLCBieSB3aGljaCB5b3UgYXJlIHN1YnNjcmliZWQsIHlvdXIgbWVzc2FnZSB3aWxs
IGJlIG1vZGVyYXRlZCB0byBhdm9pZCBzcGFtLiBQbGVhc2UgdW5kZXJzdGFuZCB0aGF0IG1vZGVy
YXRpb24gd2lsbCBvZnRlbiBjYXVzZSBzb21lIGRlbGF5LCBpbiBwYXJ0aWN1bGFyIG92ZXIgd2Vl
a2VuZHMgb3IgaG9seWRheXN9fQBuIGVycg==


----boundary-LibPST-iamunique-1452500437_-_---
Received on Wed Dec 01 2004 - 18:43:03 UTC

This archive was generated by hypermail 2.3.0 : Thu Sep 26 2013 - 06:28:29 UTC