1(* Copyright (c) Michael Norrish *)
2
3structure mlibOmegaint :> mlibOmegaint =
4struct
5   open mlibArbint
6   val eq = op=
7   val == = eq
8   infix ==
9   val fromString = SOME o fromString
10
11   val hash = Polyhash.hash
12
13   (*------------------------------------------------------------------------*)
14   (* Function to compute the Greatest Common Divisor of two integers.       *)
15   (*------------------------------------------------------------------------*)
16
17   fun ERR f s = raise Fail ("Function: "^f^", message: "^s)
18
19   fun gcd' i j = let
20       val r = i mod j
21   in  if r == zero then j else gcd' j r
22   end
23
24   fun gcd (i,j) =
25       if i < zero orelse j < zero then ERR "gcd""negative arguments to gcd"
26       else if i == zero then j else if j == zero then i
27                                else if i < j then gcd' j i else gcd' i j
28end
29