| package Rational_Arithmetic is |
| -- Whole numbers |
| type Whole is new Integer; |
| -- |
| -- Undefine unwanted operations |
| function "/" (Left, Right: Whole) return Whole is abstract; |
| -- |
| -- Rational numbers |
| -- |
| type Rational is private; |
| -- |
| -- Constructors |
| -- |
| function "/" (Left, Right: Whole) return Rational; |
| -- |
| -- Rational operations |
| -- |
| function "-" (Left, Right: Rational) return Rational; |
| -- |
| -- Mixed operations |
| -- |
| function "+" (Left: Whole ; Right: Rational) return Rational; |
| function "-" (Left: Whole ; Right: Rational) return Rational; |
| function "-" (Left: Rational; Right: Whole ) return Rational; |
| function "/" (Left: Whole ; Right: Rational) return Rational; |
| function "*" (Left: Whole ; Right: Rational) return Rational; |
| function "*" (Left: Rational; Right: Whole ) return Rational; |
| -- |
| -- Relational |
| -- |
| function "=" (Left: Rational; Right: Whole) return Boolean; |
| -- |
| private |
| type Rational is record |
| Numerator, Denominator: Whole; |
| end record; |
| end Rational_Arithmetic; |