如何解决尽管正确的类型匹配,OCaml 编译器在匹配语句期间抛出语法错误
相关函数(不是所有显示的)是
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,expr)
| Binop(op,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
解决方法
token val
是 OCaml 中的关键字。您只需要更改为不同的名称。我经常使用 valu
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。