如何强制让OCaml函数返回int类型值而不是unit?

如何强制让OCaml函数返回int类型值而不是unit?,ocaml,Ocaml,我是OCaml的新手 我正在编写一些代码,其中以下函数嵌套在另一个函数中,该函数必须返回int类型值 Asn(x,e) -> let v = eval e in Array.set vararr x+1 v vararr是上面已经声明和初始化的全局数组 在这个函数中,我希望使用“array.set vararr x+1 v”设置数组的元素,但我希望函数返回值v。我该怎么做 更新: 我把它改成: Asn(x,e) -> let v = eval

我是OCaml的新手

我正在编写一些代码,其中以下函数嵌套在另一个函数中,该函数必须返回int类型值

Asn(x,e) ->
      let v = eval e in
        Array.set vararr x+1 v
vararr是上面已经声明和初始化的全局数组

在这个函数中,我希望使用“array.set vararr x+1 v”设置数组的元素,但我希望函数返回值v。我该怎么做

更新:

我把它改成:

Asn(x,e) ->
      let v = eval e in
        Array.set vararr x+1 v; 
      v
“Array.set vararr x+1 v;”的错误为:

我认为问题不在于Asn的回报。问题在于“Array.set vararr x+1 v;”返回的内容。这很奇怪!为什么“Array.set vararr x+1 v;”必须返回int类型的值?

我想您需要这样:

let v = eval e in
Array.set vararr (x + 1) v;
v
更新

不要忘记
(x+1)
周围的括号

表达方式:

Array.set vararr x+1 v
解析如下:

(Array.set vararr x) + (1 v)
OCaml中的函数应用程序具有很高的优先级

+
运算符希望在左侧有一个int,但您在那里有一个函数

一般来说,您只需要习惯OCaml语法。经过一点经验后,情况还不错。

我想你想要这个:

let v = eval e in
Array.set vararr (x + 1) v;
v
更新

不要忘记
(x+1)
周围的括号

表达方式:

Array.set vararr x+1 v
解析如下:

(Array.set vararr x) + (1 v)
OCaml中的函数应用程序具有很高的优先级

+
运算符希望在左侧有一个int,但您在那里有一个函数


一般来说,您只需要习惯OCaml语法。经过一点经验后还不错。

如果我用;;在这里而不是;?两者之间的真正区别是什么;;及;在这种情况下?哦!我仍然得到同样的错误。我将在1分钟内更新问题。如果我使用;;在这里而不是;?两者之间的真正区别是什么;;及;在这种情况下?哦!我仍然得到同样的错误。我会在1分钟内更新这个问题。