此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.1)

2.5.12 高级专题:无穷计算的控制

在计算表达式时 Mathematica 遵循的一般原则是将变换规则一直使用到表达式 不再变化为止. 这意味着当 Mathematica 进行 x=x+1 的赋值时将进入无穷循环. 但实际 Mathematica 在有限步后就停止,这个步数由全局变量 $RecursionLimit 决定,但总可以通过明确终止提前结束它.

这个赋值可能会导致无穷循环,Mathematica 在由 $RecursionLimit 决定的有限步后停止

Mathematica 没有计算完而停止时,它返回一个保持的结果,通过调用 ReleaseHold 可继续计算

限制无穷计算的中间变量

这是一个循环定义,它的计算由 $IterationLimit 停止

变量 $RecursionLimit$IterationLimit 以两种方式控制无穷计算. $RecursionLimit 限制计算堆栈的最大深度,或由 Trace 产生的列表结构中最大嵌套的深度. $IterationLimit 限制一个计算链的最 大长度,或由 Trace 产生的结构中一个列表的最大长度. $RecursionLimit $IterationLimit 的默认值适合大部分计算和计算机系统,可以重新设置它们 为一个整数值或 Infinity. 但注意在绝大部分计算机系统中, 不要设置$RecursionLimit = Infinity.

这里将 $RecursionLimit$IterationLimit 设置为 20

这里的无穷定义 20 步以后结束

无结束条件时,这个递推定 义将导致无穷计算

计算结束之前已形成了一个相当大的结构

另一个递推定义

在这里,没有形式复杂的结构,计算由 $IterationLimit 结束

无穷循环不仅花费时间而且占用内存. 限制的计算一般不产生大的 中间结构,但 $RecursionLimit 常常产生大的中间结构. 一般情况下结构的大小是 由 $RecursionLimit 值的线性函数,但有时也会随着它指数级增长.
赋值 x=x+1 显然是一个循环,但在使用复杂的循环时,很难确认循环结束, 或者不进入无限循环. 检查的主要方向是变换规则的左右两端总不相等; 这就保证了计算过程不断前进,Mathematica 就不停止变换规则的反复使用.
在使用复杂的 /; 条件时会产生奇怪的现象,特别糟糕的是涉及全局变量的改变. 避免这问题的最好方式是在 /; 条件中不使用全局变量.这也失败时,可用 Update[s]  的所有表达式. Update[ ] Mathematica 更新所有的表达式.