ocaml中这个因子函数的命令式版本有什么问题?

lka*_*htz 3 ocaml

let impfac i = 
  let l = ref i in
  let result = ref 1 in
  let k = ref 2 in
  while !k < !l do
    result := !result * !k
      k:=!k+1
  done;
  !result
Run Code Online (Sandbox Code Playgroud)

错误消息是:

let impfac i = 
  let l = ref i in
  let result = ref 1 in
  let k = ref 2 in
  while !k < !l do
    result := !result * !k
      k:=!k+1
  done;
  !result;;
                Characters 121-123:
      result := !result * !k
                          ^^
Error: This expression is not a function; it cannot be applied
#
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 7

result := !result * !k
  k:=!k+1
Run Code Online (Sandbox Code Playgroud)

你在第一行的末尾错过了一个分号.因此,它被解读为:

result := !result * (!k k:=!k+1)
Run Code Online (Sandbox Code Playgroud)

也就是说,它认为你试图调用!kk:=!k+1作为其参数.

这也是为什么你的编辑器将线条缩进k := !k+1到比它上面的线条更右边的原因.这应该是语法错误的第一个迹象.