練習問題 6.4
上の monus 関数を改造して、引き算の答えが負になるような場合には None を返す nat -> nat -> nat option 型の関数 minus を定義しなさい。
以下は、練習問題 6.3 の解答である。
type nat = Zero | OMT of nat;; (* OMT -- OneMoreThan *)
let zero = Zero
and one = OMT Zero
and two = OMT (OMT Zero);;
let three = OMT two;;
let four = OMT three;;
let five = OMT four;;
let six = OMT five;;
(* 引き算 *)
let rec monus m n =
match (m, n) with
(Zero, _) -> zero
| (_, Zero) -> m
| (OMT m', OMT n') -> monus m' n';;
練習問題 6.4 の答え
let rec minus m n =
match (m, n) with
(Zero, _) -> None
| (_, Zero) -> Some m
| (OMT m', OMT n') -> minus m' n';;
# minus six two;;
- : nat option = Some (OMT (OMT (OMT (OMT Zero))))
# minus two six;;
- : nat option = None