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