尽管我指示了OCamlAref并没有改变它的值

我有一个真正的代码,但我制作了这个示例来说明我的问题。这是代码示例:

let ejem n =
  let count = ref 0 in
  let rec aum n =
    if n = 0 then 0
      else (count := !count + 1; n + aum (n-1) )
  in (aum n, !count)

我尝试更改函数count内部的值,aum但是,尽管在count此函数之外,但它的值总是0一旦完成。

请帮我弄清楚问题是什么

回答

OCaml 不保证评估表达式的任何特定顺序。

在你的最后一行,你有这个表达式:

(aum n, !count)

OCaml 评估!count之前的是完全合法的aum n,这将给出您看到的结果。

要控制评估顺序,您可以使用let

let res = aum n in
(res, !count)


以上是尽管我指示了OCamlAref并没有改变它的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>