尽管类型匹配正确,OCaml 编译器在匹配语句期间抛出语法错误
OCaml compiler throws syntax error during match statement despite proper type matching
相关函数(未显示所有内容)是
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
根据过去在 match 语句中出现 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
.
相关函数(未显示所有内容)是
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
根据过去在 match 语句中出现 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
.