在proc中继续执行proc的循环

时间:2018-05-14 23:21:23

标签: tcl

如何在TCL中增加递归限制。我的嵌套递归过程是错误的。

proc a {arg} {
   a $arg
}

1 个答案:

答案 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堆栈最大大小的机制。