如何在TCL中增加递归限制。我的嵌套递归过程是错误的。
proc a {arg} {
a $arg
}
答案 0 :(得分:0)
您需要interp recursionlimit path ?newlimit?命令。
"当前"的名称解释器是空字符串。
$ tclsh
% proc a {} { incr ::n; a }
% set n 0
0
% a
too many nested evaluations (infinite loop?)
% set n
1000
% interp recursionlimit ""
1000
% interp recursionlimit "" 4000
4000
% set n 0
0
% a
too many nested evaluations (infinite loop?)
% set n
4000
注意文档中的警告:
该命令仅设置Tcl调用堆栈的最大大小。它本身不能防止应用程序使用的C堆栈上的堆栈溢出。如果您的计算机对C堆栈的大小有限制,则在达到命令设置的限制之前可能会出现堆栈溢出。如果发生这种情况,请查看系统中是否存在增加C堆栈最大大小的机制。