datatype operation = Add | Sub | Mult | Div; exception BadOperation of string; fun checkDigit x = if x > 9 then raise BadOperation "too large" else if x < 0 then raise BadOperation "too small" else x; fun eval Add x y = checkDigit (x+y) | eval Sub x y = checkDigit (x-y) | eval Mult x y = checkDigit (x*y) | eval Div x y = if y = 0 then raise BadOperation "divide by zero" else checkDigit (x div y); fun eval2 Add x y = checkDigit (x+y) | eval2 Sub x y = checkDigit (x-y) | eval2 Mult x y = checkDigit (x*y) | eval2 Div x y = checkDigit (x div y) handle DivByZero => raise BadOperation "divide by zero"; fun calculate1 oper x y = SOME (eval oper x y) handle (BadOperation msg) => NONE fun calculate2 oper x y = "Answer is: " ^ (Int.toString (eval oper x y)) handle (BadOperation msg) => "Error: " ^ msg;