为什么这个ocaml代码段会引起stackoverflow?

时间:2019-04-06 18:47:07

标签: ocaml

当我用不仅仅由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)];;

1 个答案:

答案 0 :(得分:0)

您应该启用所有警告(或至少警告27),然后问题应该很明显。