object Rationals { class Rational(x :Int, y: Int) { private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b) private val g = gcd(x, y) def numer = x / g def denom = y / g def neg = new Rational(-numer, denom) def add(that: Rational) = new Rational( numer * that.denom + that.numer * denom, denom * that.denom) def sub(that: Rational) = add(that.neg) override def toString = numer + "/" + denom } def run = { println("Rationals") println(new Rational(2, 3).add(new Rational(3, 4)).toString) println(new Rational(1, 3).sub(new Rational(5 ,7)).sub(new Rational(3, 2)).toString) } }