当我用不仅仅由table2
组成的expr
执行Var
时,eval2
引起堆栈溢出。为什么会这样?
type bool_expr =
| Var of string
| Not of bool_expr
| And of bool_expr * bool_expr
| Or of bool_expr * bool_expr
let table2 a b expr =
let rec eval2 av bv xpr = match expr with
| Var(str) -> if str = a then av
else if str = b then bv
else failwith "expression contains invalid var"
| Not(xpr) -> (not (eval2 av bv xpr))
| And(xpr1, xpr2) -> ((eval2 av bv xpr1) && (eval2 av bv xpr2))
| Or(xpr1, xpr2) -> ((eval2 av bv xpr1) || (eval2 av bv xpr2))
in
[(true, true, eval2 true true expr)];;
答案 0 :(得分:0)
您应该启用所有警告(或至少警告27),然后问题应该很明显。