我是Ocaml的新手,当我为lambda微积分编写解释器时遇到了一个奇怪的错误。ocaml类型推断中的匿名变量
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
;;
编译时,编译器抱怨上解释的拉姆达行:
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
就像定义
Error: This expression has type env/1490
but an expression was expected of type env/1457
在那里我搞砸任何想法向上? 谢谢!
这意味着'env'被声明了两次,在不同范围的不同行上。这两种类型具有相同的名称,但不相等。 – Bergi
(使这个答案:-) –
明天我会找到一些适当的参考,然后写一个。 – Bergi