Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler errors ocaml中的环境-“类型a';环境`_Compiler Errors_Syntax Error_Ocaml - Fatal编程技术网

Compiler errors ocaml中的环境-“类型a';环境`

Compiler errors ocaml中的环境-“类型a';环境`,compiler-errors,syntax-error,ocaml,Compiler Errors,Syntax Error,Ocaml,我需要在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

我需要在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.

为什么我会犯这个错误?我很想知道我做错了什么。

您需要将引号放在类型变量名之前,而不是后面:

type 'a env =  (string * 'a) list

您需要将引号放在类型变量名称之前,而不是后面:

type 'a env =  (string * 'a) list

a类环境
应为
a类环境


'a
是一个类型变量,名称前带有撇号。在等号的右侧也会再次提到它
a'
只是一个之前未定义的标识符,但在该位置显然不具有语法效力。

类型a“env
应该是
类型a env


'a
是一个类型变量,名称前带有撇号。在等号的右侧也会再次提到它<代码>a'只是一个以前未定义的标识符,但在该位置显然在语法上无效。

这与“a而非a”的顶层输入相同:>键入“a环境=(字符串*”a)列表;;>^语法错误。我不明白这个问题。它们都应该是
'a
这与'a而不是'a'是一样的#顶级输入:>键入'a env=(string*'a)list;;>^语法错误。我不明白这个问题。它们都应该是
'a
请不要编辑您的问题,使其含义改变,并且使所有现有答案变得毫无意义。本网站旨在作为有用问题和答案的存储库,而不是帮助台。如果你有一个新问题,你应该发布一个新问题,而不是编辑旧问题,这样它们对其他人可能仍然有用。不过,老实说,你真的应该能够自己解决这些问题。请参阅。停止编辑您的帖子!您的错误是您编写了
a'
,而不是
'a
。如果更正后仍有错误,请添加水平规则并解释新错误或创建新问题。但是,请停止编辑你的帖子。请不要编辑你的问题,使其含义发生改变,并且使所有现有的答案变得毫无意义。本网站旨在作为有用问题和答案的存储库,而不是帮助台。如果你有一个新问题,你应该发布一个新问题,而不是编辑旧问题,这样它们对其他人可能仍然有用。不过,老实说,你真的应该能够自己解决这些问题。请参阅。停止编辑您的帖子!您的错误是您编写了
a'
,而不是
'a
。如果更正后仍有错误,请添加水平规则并解释新错误或创建新问题。但是停止编辑你的文章。