Почему этот фрагмент ocaml вызывает переполнение стека? - PullRequest
0 голосов
/ 06 апреля 2019

Когда я выполняю 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 голосов
/ 06 апреля 2019

Вы должны включить все предупреждения (или хотя бы предупреждение 27), тогда проблема должна быть очевидна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...