我需要声明并使用ocaml中的环境。在我的学习书中,我找到了以下代码:
type a' env = (string * 'a)list;;
exception WrongBindList;;
let emptyenv(x) = [("", x)];;
let rec applyenv(x, y) = match x with
| [(_, e)] -> e
| (i1, e1) :: x1 -> if y = i1 then e1
else applyenv(x1, y)
| [] -> failwith("wrong env") ;;
let bind(r, l, e) = (l, e) :: r ;;
type evT = Unbound | FunVal of evFun | RecFunVal of string*evFun
and evFun = string * exp * (evT env);;
但是当我运行代码时,我收到以下错误:
Type exp defined.
#Toplevel input:
>type a' env = (string * 'a)list;;
> ^^^
Syntax error.
为什么我收到此错误?我很想知道我做错了什么。
答案 0 :(得分:3)
type a' env
应为type 'a env
'a
,名称前面的撇号是一个类型变量。它也在等号的右侧再次提到。 a'
只是一个先前未定义的标识符,但在该位置显然不具有语法有效性。
答案 1 :(得分:2)
您需要将引号放在类型变量名之前而不是之后:
type 'a env = (string * 'a) list