OCaml编译器在match语句期间抛出语法错误,尽管类型匹配正确



相关函数(并非所有显示的函数(是

let rec eval_expr env e = match e with
| Value(value) -> value
| ID(var) -> lookup(env, var)
| Fun(var,expr) -> Closure(env, var, expr)
| Not(expr) -> let val = eval_expr env expr in begin match val with
| Bool(a) -> Bool(not a)
| _ -> raise (TypeError ("Expected type bool")) end
| Binop(op, expr, expr2) -> begin match op with ...

但是,编译器抛出以下错误:

| Not(expr) -> let val = eval_expr env expr in begin match val with
^^^
Error: Syntax error

根据过去在匹配语句中出现OCaml错误的经验,如果你100%确信给定的行没有错误,那么问题很可能出现在前一行。然而,我把这一行移到了开头,这样代码看起来就像

let rec eval_expr env e = match e with
| Not(expr) -> let val = eval_expr env expr in begin match val with
| Bool(a) -> Bool(not a)
| _ -> raise (TypeError ("Expected type bool")) end
| Value(value) -> value
| ID(var) -> lookup(env, var)
| Fun(var,expr) -> Closure(env, var, expr)
| Binop(op, expr, expr2) -> begin match op with ...

仍然出现了同样的错误。那么错误就在这条线上,可能是什么呢?以下是有帮助的类型:

type expr =
| Value of value
| ID of var
| Fun of var * expr
| Not of expr
| Binop of op * expr * expr
| If of expr * expr * expr
| FunctionCall of expr * expr
| Let of var * bool * expr * expr
type value =
| Int of int
| Bool of bool
| String of string
| Closure of environment * var * expr

令牌val是OCaml中的一个关键字。你只需要换一个不同的名字。我经常使用valu

相关内容

最新更新