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)
result := !result * !k
k:=!k+1
Run Code Online (Sandbox Code Playgroud)
你在第一行的末尾错过了一个分号.因此,它被解读为:
result := !result * (!k k:=!k+1)
Run Code Online (Sandbox Code Playgroud)
也就是说,它认为你试图调用!k与k:=!k+1作为其参数.
这也是为什么你的编辑器将线条缩进k := !k+1到比它上面的线条更右边的原因.这应该是语法错误的第一个迹象.