我的程序中有以下代码片段,其中OCaml(3.12.1)似乎占用了两个分支。
1
程序没有终止,当在ocamldebug中检查时,我看到对于new_lst2,两个分支都被占用(然后是else分支)。 new_lst2获取错误的值,导致非终止循环。在调试器中执行程序一段时间后会发生这种情况。
我通过网上搜索OCaml找不到任何东西。我通过将每个if-then-else重写为两个if-then-elses来解决这个问题。与let new_lst1 =
if List.length lst1 = 0 then tmp_lst1_1
else tmp_lst1_2
in
let new_lst2 =
if List.length lst2 = 0 then tmp_lst2_1
else tmp_lst2_2
in
........
类似,可以重写为let lst = if cond then lst1 else lst2
和let sub_lst1 = if cond then lst1 else []
以及let sub_lst2 = if not cond then lst2 else []
但是,能够深入了解这个令人困惑的问题。有没有其他人遇到类似的问题?关于可能发生的事情的任何想法?
感谢。
答案 0 :(得分:1)
这将是代码生成错误,这实际上不太可能,但并非不可能。我将继续进行的方法是使用-S标志查看生成的汇编代码。如果您可以显示上述代码段的错误代码,那将是令人信服的。
另一种方法是制作一个显示不良行为的小型自包含代码,并显示所有代码。无法从您的代码段中推断出任何内容(或者至少我不能)。