正如@Amadan提到的,定义一个首先将表达式求值为int的函数更容易
eval_exp: exp -> int
. 然后您可以计算元组中的两个表达式
Equal(e1, e2)
eval: equation -> bool
).
类型中也不需要值True和False
equation
,因为您可以直接从函数返回bool,而无需模式匹配。请注意,如果出于某种原因再次将它们传递给
eval
功能。
type equation =
Equal of exp * exp
and exp =
| Val of int
| Add of exp * exp
| Sub of exp * exp
let rec eval (e: equation) : bool =
let rec eval_exp e =
match e with
| Val i -> i
| Add (e1, e2) -> (eval_exp e1) + (eval_exp e2)
| Sub (e1, e2) -> (eval_exp e1) - (eval_exp e2)
in
match e with
| Equal (e1, e2) ->
if (eval_exp e1) = (eval_exp e2)
then true
else false