comp.lang.ada
 help / color / mirror / Atom feed
* Re: Predefined OPerators
@ 1986-10-16 17:03 John Prentice
  0 siblings, 0 replies; only message in thread
From: John Prentice @ 1986-10-16 17:03 UTC (permalink / raw)




I know this subject may be getting a bit old, but I would like to 
take exception to the position that the '*' operator defined in 
Standard represents an exception to the rule (ARM 3.3.3(2)) defining
the location of the declaration of predefined operators.

Given:

1  procedure Not_Immediately_After is
2    type F1 is delta 1.016      range 0.0 .. 1_000.0;
3    type F2 is delta 2#0.1#E-3  range 0.0 .. 1_000.0;
4    X : F1 := 1.0;
5    Y : F2 := 2.0;
6  begin
7    X := F1 (Standard."*"(X,Y));
8  end Not_Immediately_After;


The assertion seemed to be that the operator '*' referenced on line 7
is a predefined operator for type F1 or F2 (or both).  If this were true,
then clearly we have an exception to the rule for predefined operators
since F1 and f2 are both defined in 'Not_Immediately_After' while the 
operator '*' is defined in Standard (and hence the legality of the
reference to 'Standard."*"').

I think the correct interpretation of this situation is that the operator
refereced on line 7 was not predefined for type F1 or F2, but is
predefined for the type 'universal_fixed' which is declared in Standard
(ARM C-3(11)):

-- The type 'universal_integer' is predefined.  The only operators
-- declared for this type are:

-- function "*" (Left : 'any_fixed_point_type'; Right : 'any_fixed_point_type')
-- return 'universal_fixed';


Thus the declaration of the predefined operator '*' does indeed follow
immediately after the declaration of the type.  The anomaly here 
is that the function '*' seems to be a polymorphic function--it accepts
arguments of (potentially) many different types.


Now I have a question:  What is the rational for having this single
polymorphic function in a language as strongly typed as Ada?  Could
the ARM read:

-- function "*" (Left : 'universal_fixed'; Right : 'universal_fixed')
-- return 'universal_fixed';

and state that a call to this function with any fixed point type would
result in an implicit conversion of that type to 'universal_fixed'?
The implicit conversion would seem to me to be less inconsistent than
a polymorphic function. 


John Prentice,
Hughes Aircraft
-------

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1986-10-16 17:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1986-10-16 17:03 Predefined OPerators John Prentice

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox