TAPL(Types and Programming Languages)の課題を適当に実装する。
type Term = | TmTrue | TmFalse | TmZero | TmIsZero of Term | TmIf of Term * Term * Term | TmSucc of Term | TmPred of Term | TmNot of Term let rec Eval t = match t with | TmTrue -> TmTrue | TmFalse -> TmFalse | TmZero -> TmZero | TmIf(TmTrue,t2,t3) -> t2 | TmIf(TmFalse,t2,t3) -> t3 | TmPred(TmZero) -> TmZero | TmSucc(TmZero) -> TmSucc(TmZero) | TmSucc(TmPred(t1)) -> t1 | TmIf(t1,t2,t3) -> let t1' = Eval t1 Eval (TmIf(t1',t2,t3)) | TmNot(TmTrue) -> TmFalse | TmNot(TmFalse) -> TmTrue | TmNot(t1) -> let t1' = Eval t1 Eval (TmNot(t1'))