package
RATIONAL_NUMBERS is
type
RATIONAL is
record
NUMERATOR : INTEGER;
DENOMINATOR : POSITIVE;
end record
; function
EQUAL(X,Y : RATIONAL) return
BOOLEAN;
function
"/" (X,Y : INTEGER) return
RATIONAL;
-- to construct a rational number
function
"+" (X,Y : RATIONAL) return
RATIONAL;
function
"-" (X,Y : RATIONAL) return
RATIONAL;
function
"*" (X,Y : RATIONAL) return
RATIONAL;
function
"/" (X,Y : RATIONAL) return
RATIONAL;
end
;
package body
RATIONAL_NUMBERS is
procedure
SAME_DENOMINATOR (X,Y : in out
RATIONAL) is
begin
-- reduces X and Y to the same denominator:
...
end
; function
EQUAL(X,Y : RATIONAL) return
BOOLEAN is
U,V : RATIONAL;
begin
U := X;
V := Y;
SAME_DENOMINATOR (U,V);
return
U.NUMERATOR = V.NUMERATOR;
end
EQUAL;
function
"/" (X,Y : INTEGER) return
RATIONAL is
begin
if
Y > 0 then
return
(NUMERATOR => X, DENOMINATOR => Y);
else
return
(NUMERATOR => -X, DENOMINATOR => -Y);
end if
;
end
"/";
function
"+" (X,Y : RATIONAL) return
RATIONAL is
... end
"+";
function
"-" (X,Y : RATIONAL) return
RATIONAL is
... end
"-";
function
"*" (X,Y : RATIONAL) return
RATIONAL is
... end
"*";
function
"/" (X,Y : RATIONAL) return
RATIONAL is
... end
"/"; end
RATIONAL_NUMBERS;