Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 附加到可变列表时堆栈溢出_List_Ocaml_Stack Overflow_Mutable - Fatal编程技术网

List 附加到可变列表时堆栈溢出

List 附加到可变列表时堆栈溢出,list,ocaml,stack-overflow,mutable,List,Ocaml,Stack Overflow,Mutable,我正在尝试编写一个递归函数,该函数使用具有可变列表字段的记录类型 此函数应在递归调用期间修改可变字段,向列表中添加新值。一切正常,但当输入数据量开始增加时,我开始出现堆栈溢出错误 下面是一个演示我的问题的简单示例: typety={mutable ll:int list;} 让我们在= 让记录辅助acc i= 如果我我认为问题在于@操作符(相当于List.append)不是尾部递归的 文件说: 连接两个列表。与中缀运算符@相同。非尾部递归(第一个参数的长度) 您可以通过编写tail recurs

我正在尝试编写一个递归函数,该函数使用具有可变列表字段的记录类型

此函数应在递归调用期间修改可变字段,向列表中添加新值。一切正常,但当输入数据量开始增加时,我开始出现堆栈溢出错误

下面是一个演示我的问题的简单示例:

typety={mutable ll:int list;}
让我们在=
让记录辅助acc i=

如果我我认为问题在于
@
操作符(相当于
List.append
)不是尾部递归的

文件说:

连接两个列表。与中缀运算符@相同。非尾部递归(第一个参数的长度)


您可以通过编写tail recursive append函数来解决问题。

tail recursive append确实解决了这个最小示例中的问题。但在这个项目中它对我不起作用,可能是因为我使用的JaneStreet核心库中的一些函数也不是尾部递归的。我去想办法,谢谢!是的,问题是我对大列表使用的不是尾部递归函数。谢谢,现在一切都好了。我还找到了一个很好的方法来获取相同错误的更多信息回溯:我将项目编译成字节码,并使用
ocamlrun-b
运行它(也许它对其他人有用)。
Stack overflow during evaluation (looping recursion?).
Raised by primitive operation at file "stdlib.ml", line 296, characters 22-31
Called from file "stdlib.ml", line 296, characters 22-31