如何解决OCaml:无限循环
我正在尝试执行这个简单的 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
时修改 !k mod 5 = 0
。如果 !k
不能被 5 整除,它的值永远不会改变。这表明循环将运行 0 次或将运行无限次。
您没有显示对 example
的任何调用,但在我看来,任何传递值 > 42 而不是 5 的倍数的调用都应该无限循环。
顺便说一下,这就是@user2864740 试图指出的。 43 是一个大于 42 且不能被 5 整除的值。
(作为旁注,您应该使用 =
来比较值是否相等。OCaml 中的 ==
运算符在有限的情况下很有用。这通常会给来自其他语言的人带来问题。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。