在LearnOcaml中编译代码时出现“堆栈空间不足”错误

时间:2019-01-18 13:16:20

标签: ocaml

好奇心:我是在Learn Ocaml中编写代码的,当我编译代码时,编译器会说:“出栈错误”。我想这是由于我编写的代码量。所以我想知道如何检查堆栈有多满?我写了大约450-500行代码。与几个新行。 也可能是堆栈中已执行的代码占用了所有堆栈的数量。因此,我只想知道导致问题的原因以及如何解决?这是显示错误的图片:

enter image description here

当我仅将编辑器中的部分代码复制到顶层时,错误消失了。

1 个答案:

答案 0 :(得分:2)

堆栈利用率不取决于程序的大小或其中的行数,而取决于程序的运行时行为,主要是由于循环递归。例如,这个小函数将消耗任意大小的堆栈:

let rec f () = f () + f ()

在您提供的图片中,我可以看到至少一种未绑定递归的情况(即绝对不会终止的递归)。调用insert时,是将其应用于整个树m,而不是子树。因此,每次进行新的调用时,实际上什么都没有改变,并且会遇到无限循环。