【发布时间】:2017-09-04 21:38:34
【问题描述】:
我是 Ocaml 的新手,在为 lambda 演算编写解释器时遇到了一个奇怪的错误。
let rec valof : exp -> env -> value =
fun exp env ->
match exp with
Var n -> exp2value (lookup env n)
| Lambda (name , body) -> Clos (name , body , env) (*some thing wrong here*)
| _ -> Err
;;
exp、value 和 env 的定义如下:
type exp =
Num of int
| Str of string
| Err
| Var of string
| Lambda of string * exp
| App of exp * exp
;;
type value =
Num of int
| Str of string
| Clos of string * exp * env
| Err
;;
type env =
Empty
| Cons of string * exp * env
;;
编译时,编译器在解释器的 lambda 行报错:
Error: This expression has type env/1490
but an expression was expected of type env/1457
任何想法我搞砸了? 谢谢!
【问题讨论】:
-
这意味着
env被声明了两次,在不同范围内的不同行上。这两种类型同名,但不相等。 -
(将此作为答案:-)
-
明天我会找到一些合适的参考文献,然后写一篇。
标签: ocaml type-inference