let nombredeCubes = ref 0 in
for i = 1 to 17 do
nombredeCubes := nombredeCubes + i*i*i
i := i+1
done;
print_int nombredeCubes;
当我尝试编译此代码时,出现以下错误:
line 3, characters 20-33:
Error: This expression has type int ref
but an expression was expected of type int
但我不明白为什么。我的意思是为什么“for”期望一个int而不是一个int ref,是“for”一个函数?
答案 0 :(得分:1)
您需要使用!
运算符来访问ref单元格的值:
nombredeCubes := !nombredeCubes + i*i*i
您也不应该(并且不会被允许)手动增加i
。 for构造将为您做到这一点。
编辑:使用递归而不是突变和命令式编程来解决这个问题会更加惯用。它也会使步进更清晰:
let nombredeCubes =
let rec loop acc = function
| i when i > 0 -> loop (acc + i*i*i) (i-2)
| _ -> acc
in loop 0 17
in print_int nombredeCubes