equal
deleted
inserted
replaced
30 end; |
30 end; |
31 |
31 |
32 structure Rat : RAT = |
32 structure Rat : RAT = |
33 struct |
33 struct |
34 |
34 |
|
35 datatype rat = Rat of int * int; (*nominator, denominator (positive!)*) |
|
36 |
35 fun common (p1, q1) (p2, q2) = |
37 fun common (p1, q1) (p2, q2) = |
36 let |
38 let val m = PolyML.IntInf.lcm (q1, q2) |
37 val m = Integer.lcm q1 q2; |
|
38 in ((p1 * (m div q1), p2 * (m div q2)), m) end; |
39 in ((p1 * (m div q1), p2 * (m div q2)), m) end; |
39 |
|
40 datatype rat = Rat of int * int; (*nominator, denominator (positive!)*) |
|
41 |
40 |
42 exception DIVZERO; |
41 exception DIVZERO; |
43 |
42 |
44 fun rat_of_quotient (p, q) = |
43 fun rat_of_quotient (p, q) = |
45 let |
44 let val m = PolyML.IntInf.gcd (p, q) |
46 val m = Integer.gcd (Int.abs p) q |
|
47 in Rat (p div m, q div m) end handle Div => raise DIVZERO; |
45 in Rat (p div m, q div m) end handle Div => raise DIVZERO; |
48 |
46 |
49 fun quotient_of_rat (Rat r) = r; |
47 fun quotient_of_rat (Rat r) = r; |
50 |
48 |
51 fun rat_of_int i = Rat (i, 1); |
49 fun rat_of_int i = Rat (i, 1); |