我有一个真正的代码,但我制作了这个示例来说明我的问题。这是代码示例:
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)
Run Code Online (Sandbox Code Playgroud)
我尝试更改函数count内部的值,aum但是,尽管在count此函数之外,但它的值总是0一旦完成。
请帮我弄清楚问题是什么
OCaml 不保证评估表达式的任何特定顺序。
在你的最后一行,你有这个表达式:
(aum n, !count)
Run Code Online (Sandbox Code Playgroud)
OCaml 评估!count之前的是完全合法的aum n,这将给出您看到的结果。
要控制评估顺序,您可以使用let:
let res = aum n in
(res, !count)
Run Code Online (Sandbox Code Playgroud)