kempe-0.2.0.4: lib/rational.kmp
import"prelude/fn.kmp"
import"lib/numbertheory.kmp"
; Slightly suspect rational based on 'Int' type
type Rational a { Rational a a }
unRational : (Rational a) -- a a
=: [ { case | Rational -> } ]
multRat : (Rational Int) (Rational Int) -- (Rational Int)
=: [ dip(unRational) unRational dip(swap *) * Rational reduce ]
reduce : (Rational Int) -- (Rational Int)
=: [ unRational dup2 gcd dup dip(swap dip(/)) / Rational ]
addRat : (Rational Int) (Rational Int) -- (Rational Int)
=: [ dip(unRational) unRational dip(swap)
dup2 * dip(swap dip(swap) * dip(*) +)
Rational reduce
]
%foreign kabi multRat
%foreign kabi addRat
%foreign kabi reduce