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

2.6.6 块和局部值

Module 使变量名具有局部性,但有时需要名是全局的,值是局部的,这可以用 Block 来实现.

设置局部值

涉及 x 的一个表达式

x 局部值计算以前的表达式

x 没有全局值

如前一节所述,在 Module[ x , body] 中的变量x总是有一个唯一符号,模块 每次调用时这符号不同,且与全局符号 x 也有区别. Block[ x , body] 中的 x 是一个全局的符号. 这一个块的作用是让 x 有局部值. 当进入这个块时 x 的值在退出该块时恢复,而在块执行时,x 可以取任意值.

给符号 t 设置值 17

模块中的变量有唯一的局部名

在块中变量有全局名,但有局部值

t 在块中给了一个局部值

当块执行结束时,t 恢复了以前的值

Mathematica 的块设置了可以暂时改变值的一种环境. 在块执行过程中用在块 中所定义的变量的当前值计算表达式,不论表达式是该块的一部分或是在 计算中某一处产生的情况都是如此.

这里定义了符号 u 的一个延时值

在块之外计算 u 时,t 的全局值被使用

可以指定 t 的临时值在块中使用

MathematicaBlock 的间接使用在 Do, SumTable 等的递推结构中. 在所有这些 结构中,Mathematica 建立了迭代递推变量的局部值.

Sum 自动使递推变量 t 是局部值

在递推结构中的局部变量比在 Block 中的更一般一些,它们处理 a[1], 纯符号等变量

Mathematica 中定义函数时,用不直接给出变量但不能影响函数的全局变量方便的. 例如,Mathematica 有一个全局变量 $RecursionLimit,它影响所有函数的计算但又 不直接是函数的变量. 通常 Mathematica 将所定义的全局变量的值保持到明显 的改变了它为止,但也需要仅在一个计算过程中或某一项的计算中有效的值, 这可以通过把它设置为 Mathematica 块的局部值来实现.

定义依赖于全局变量 t 的函数

这里使用了 t 的全局值

在块内可以设置 t 的局部值

全局变量不仅可以用来设置函数的参数,还可以积累从函数得到的结果. 在块中设置这样的局部变量,可以积累在这个块执行过程中从所调用 函数得到的结果.

此函数增加了全局变量 t,返回的是 t 的当前值

如果不用块,计算 h[a] 时改变全局变量 t 的值

使用了块后,仅局部变量 t 被影响

全局变量 t 的值没有改变

当输入 Block[ x , body] 时,x 的所有值被删除,这意味着在这个块内可以把 x 当符号变量来处理. 但从块明确地返回了x 以后,x 就被在块外计算时产生的值 所代替.

当输入块时 t 的值被删除

当返回含有t的表达式时,它就用 t 的全局值进行计算