[package]
[Java implementation]
[Execution output]
Fraction
class Fraction<T>: fraction(T: a, T: b);canonical(n, d) = (g = sign d * gcd(n, d); fraction(n /! g, d /! g));stream << fraction(a, b) = if b == multiplicative_identity
then stream << a
else stream << a << "/" << b;
fraction(a, b) == fraction(c, d) = (a == c and b == d);
compare(fraction(n1, d1), fraction(n2, d2)) = compare(n1 * d2, n2 * d1);
fraction(n1, d1) + fraction(n2, d2) = canonical(n1 * d2 + n2 * d1, d1 * d2);
-fraction(n, d) = fraction(-n, d);
fraction(n1, d1) * fraction(n2, d2) = canonical(n1 * n2, d1 * d2);
/fraction(n, d) = if n < additive_identity
then fraction(-d, -n)
else fraction(d, n);
additive_identity = fraction(additive_identity, multiplicative_identity);
multiplicative_identity = fraction(multiplicative_identity, multiplicative_identity);