&引用;“堆栈空间不足”;在LearnOcaml中编译代码时出错
好奇:我在学习Ocaml中编写代码,当我编译代码时,编译器说:“堆栈外错误”。我想这是因为我写了大量的代码。所以我想知道我怎样才能检查堆栈有多满?我写了大约450-500行代码。有几条新线路。 也可能是堆栈中执行的代码数量占用了所有堆栈。所以我只想知道问题的原因和解决方法?以下是显示错误的图片:&引用;“堆栈空间不足”;在LearnOcaml中编译代码时出错,ocaml,Ocaml,好奇:我在学习Ocaml中编写代码,当我编译代码时,编译器说:“堆栈外错误”。我想这是因为我写了大量的代码。所以我想知道我怎样才能检查堆栈有多满?我写了大约450-500行代码。有几条新线路。 也可能是堆栈中执行的代码数量占用了所有堆栈。所以我只想知道问题的原因和解决方法?以下是显示错误的图片: 当我只将编辑器中的部分代码复制到顶层时,错误就消失了。堆栈利用率并不取决于程序的大小或其中的行数,它取决于程序的运行时行为,主要是由于循环递归。例如,此小函数将使用任意大小的堆栈: let rec f
当我只将编辑器中的部分代码复制到顶层时,错误就消失了。堆栈利用率并不取决于程序的大小或其中的行数,它取决于程序的运行时行为,主要是由于循环递归。例如,此小函数将使用任意大小的堆栈:
let rec f () = f () + f ()
在您提供的图片中,我可以看到至少一种未绑定递归(即,肯定不会终止的递归)。调用
insert
时,将其应用于整个树m
,而不是子树。因此,在每次新的调用中,实际上什么都没有改变,而您得到的是一个无限循环。堆栈利用率并不取决于程序的大小或其中的行数,它取决于程序的运行时行为,主要是由于循环递归。例如,此小函数将使用任意大小的堆栈:
let rec f () = f () + f ()
在您提供的图片中,我可以看到至少一种未绑定递归(即,肯定不会终止的递归)。调用
insert
时,将其应用于整个树m
,而不是子树。因此,在每次新的调用中,实际上什么都没有改变,而您得到的是一个无限循环。虽然我同意问题可能是一个失控的递归(除非示例树非常大),但在insert
中我看不到问题。m
不是树,而是要插入的元素n
是一棵树,它被简化了。虽然我同意问题可能是一个失控的递归(除非示例树非常大),但我在insert
中没有看到问题。m
不是树,而是要插入的元素n
是树,并被缩减。