Ocaml接受if-then-else的两个分支

时间:2016-08-26 19:08:15

标签: debugging ocaml branch

我的程序中有以下代码片段,其中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 lst2let sub_lst1 = if cond then lst1 else []以及let sub_lst2 = if not cond then lst2 else []

但是,能够深入了解这个令人困惑的问题。有没有其他人遇到类似的问题?关于可能发生的事情的任何想法?

感谢。

1 个答案:

答案 0 :(得分:1)

这将是代码生成错误,这实际上不太可能,但并非不可能。我将继续进行的方法是使用-S标志查看生成的汇编代码。如果您可以显示上述代码段的错误代码,那将是令人信服的。

另一种方法是制作一个显示不良行为的小型自包含代码,并显示所有代码。无法从您的代码段中推断出任何内容(或者至少我不能)。