OCaml:无限循环

OCaml : Infinite Loop

我正在尝试执行这个简单的 while 循环,但它不起作用。编译器没有给出任何类型的错误或警告,但是当我尝试 运行 我的函数时,它以无限循环结束:

let example x =
  let k = ref x in 
  while (!k > 42) do
    if ( (!k mod 5) == 0) then (
      k:= !k/2
    );
  done;
 if(!k<42) then (
   Printf.printf "k is less than 42"  
  );
  if(!k == 42) then (
    Printf.printf "k is equal to 42" 
  )
;;

嗯,您的循环仅在 !k mod 5 = 0 时修改 !k。如果 !k 不能被 5 整除,它的值永远不会改变。这表明循环将 运行 0 次或 运行 无限次。

你没有显示对 example 的任何调用,但在我看来,任何你传递值 > 42 而不是 5 的倍数的调用都应该无限循环。

顺便说一句,这就是@user2864740 试图指出的。 43 是一个 > 42 的值,不能被 5 整除。

(作为旁注,您应该使用 = 来比较值是否相等。OCaml 中的 == 运算符在有限的情况下很有用。这通常会给来自其他语言的人带来问题.)