计算

标准计算序列
下面是在计算例如 h[e1,e2] 的表达式的时候,Wolfram 语言所采取的步骤. 每当表达式发生改变时,Wolfram 语言重新开始计算的过程序列.
非标准变量计算
有大量 Wolfram 语言内置函数用特殊方式计算变量. 控制结构 While 就是一个例子. 符号 While 具有属性 HoldAll. 于是,While 的变量不作为标准计算过程的一部分进行计算. 相反地,While 的内部代码采用特殊方式计算变量. 在 While 的情况下,代码重复计算变量,以完成一个循环.
控制结构(Control structures)
在由控制流决定的序列中计算的变量(如 CompoundExpression
条件(Conditionals)
只有当采用该变量对应的分支时,才计算的变量(如 IfWhich
逻辑运算(Logical operations)
只有当确定逻辑结果需要时,才计算的变量 (如 AndOr
迭代函数(Iteration functions)
在迭代的每个步骤中计算的第一个变量(如 DoSumPlot
跟踪函数(Tracing functions)
从未计算的形式 (如 Trace
赋值
第一个变量只是部分计算 (如 SetAddTo
纯函数
不计算函数体(如 Function
作用域结构(Scoping constructs)
不计算变量规格(如 ModuleBlock
保持函数(Holding functions)
变量保持不计算的形式(如 HoldHoldPattern
用特殊方式计算变量的内置函数.

逻辑操作

在形如 的表达式中, 依次计算. 一旦发现任何 等于 False,计算就停止,并且返回结果 False. 这意味着用户可以使用 来表示程序中的不同分支,只有当满足某些条件的时候,才计算一个特定的分支.
Or 函数与 And 相似;一旦它找到值为 True 的变量,就返回 True. 另一方面,Xor 总是计算所有的变量.

迭代函数

迭代函数如 Do[f,{i,imin,imax}] 的计算过程如下:
如果有若干个迭代变量,对每个变量和所有之前的变量值依次使用相同的过程处理.
除非特别指明,否则直到对 i 赋以特定的值才计算 f,并且对每个选定的 i 值进行计算. 使用 Evaluate[f] 可以立即计算 f,而不用在一个特定的值被赋给 i 以后才计算.

赋值

赋值的左边只能被部分计算.
右边被立即计算(=),但是没有延时赋值(:=).
出现在赋值左边的形如 HoldPattern[expr] 的任意子表达式没有被计算. 当子表达式用于模式匹配时,虽然它是 expr 而没有 HoldPattern,但是它仍然是匹配的.
重载非标准变量计算
f[,Evaluate[expr],]
计算变量 expr,不论 f 是否具有 HoldFirstHoldRest 或者 HoldAll 等保持不计算的属性
重载变量的保持不计算功能.
通过使用 Evaluate,可以立即计算函数的任意变量,即使该变量通常在之后的函数的控制下计算. 一个异常情况是当函数具有 HoldAllComplete 属性的时候;在这种情况下,函数的内容不会被修改.
避免计算
Wolfram 语言提供了各种不同的函数作为封装(wrappers)来避免计算它们所包含的表达式.
Hold[expr]
在所有情况下作为 Hold[expr] 处理
HoldComplete[expr]
禁用上值(upvalue),并作为 HoldComplete[expr] 处理
HoldForm[expr]
显示时作为 expr 处理
HoldPattern[expr]
在规则、定义和模式中,作为 expr 处理
Unevaluated[expr]
当变量传递给函数时,作为 expr 处理
避免表达式进行计算的封装(Wrapper).
计算的全局控制
在我们目前讨论过的计算过程中,涉及了两种基本步骤:
迭代产生了这样的计算链:其中通过使用各种不同的变换规则,得到连续的表达式.
Trace 把计算链显示为列表,并且显示对应于子列表中的递归的辅助计算.
与辅助计算序列相关联的表达式由 Stack[] 返回的列表给出,这些辅助计算产生当前正在计算的表达式.
$RecursionLimit
最大迭代深度
$IterationLimit
最大迭代次数
控制表达式计算的全局变量.
退出
通过调用函数 Abort[],或者通过输入合适的中断键,用户可以让 Wolfram 语言在计算中的任意点退出.
当被要求退出时,Wolfram 语言将尽快终止计算. 如果获得的答案是不正确的或者不完整的,那么 Wolfram 语言返回的不是答案而是 $Aborted.
可以使用 CheckAbort 来捕获退出,并且使用 AbortProtect 获得延迟.